Response.WriteFile() - 不工作的asp net mvc 4.5

时间:2013-03-17 07:20:47

标签: asp.net-mvc savefiledialog response.write

我查看了很多资源,以下内容应该可以正常工作,但是我的保存对话框永远不会显示(不是特定于浏览器):

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

  5. 任何帮助都非常赞赏

2 个答案:

答案 0 :(得分:2)

不确定这是您唯一的问题,但是Content-Disposition标题is supposed to be a quoted-string中的文件名,因此您需要在其周围添加引号,特别是因为它包含空格;

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

在旁注中,Response.End()也会刷新缓冲区,因此Response.Flush()是多余的。

答案 1 :(得分:0)

解决了这个问题。我正在使用Ajax从我的一个视图中调用此函数。这不起作用(我不知道为什么),但我认为这可能是因为我有多个控制器。从@HTML.ActionLink()调用此方法可以正确显示。