Response.WriteFile() - 不工作的ASP净MVC 4.5(Response.Wr

2019-07-21 19:07发布

我已经看了很多资源及以下应该工作,但是我的另存为对话框从不说明(不针对特定浏览器):

Response.ContentType = "application/octet-stream";
string downloadName = "Request "+request.RequestID+ "_researchExport.doc";
Response.AddHeader("Content-Length", 
    new System.IO.FileInfo(FileName).Length.ToString());
Response.AddHeader("Content-Disposition", 
    string.Format("attachment; filename={0};", downloadName));
Response.WriteFile(FileName);
Response.Flush();
Response.End();

文件肯定存在。 我也试过如下:

  1. 使用Response.TransmitFile(FileName) ,而不是

  2. 留出Response.End()

  3. 离开出Content-Length

  4. 使用this.ControllerContext.HttpContext.Response

任何帮助将不胜感激

Answer 1:

不知道如果这是你唯一的问题,但在文件名Content-Disposition头应该是一个quoted-string ,所以你需要添加引号它,特别是因为它包含空格;

Response.AddHeader("Content-Disposition", 
    string.Format("attachment; filename=\"{0}\"", downloadName));

在一个侧面说明, Response.End()也将刷新缓冲区,所以你Response.Flush()是多余的。



Answer 2:

解决了这个问题。 我使用Ajax从我的观点一个调用这个函数。 这没有工作(我不知道为什么),但我认为这可能是因为我有多个控制器。 从调用该@HTML.ActionLink()有提示显示正常。



文章来源: Response.WriteFile() — not working asp net mvc 4.5