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

Posted

技术标签:

【中文标题】Response.WriteFile() - 不工作 asp net mvc 4.5【英文标题】:Response.WriteFile() -- not working asp net mvc 4.5 【发布时间】:2013-03-17 07:20:47 【问题描述】:

我查看了许多资源,以下应该可以工作,但是我的另存为对话框从未显示(不是特定于浏览器):

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();

该文件确实存在。我还尝试了以下方法:

    改用Response.TransmitFile(FileName)

    省略Response.End()

    省略 Content-Length 标头

    使用this.ControllerContext.HttpContext.Response

任何帮助将非常感激

【问题讨论】:

我已尝试在此处使用建议的答案:***.com/questions/8897458/… 但这也没有用 更新:我在 Response.End() 上确实收到了 HTTP 连接关闭错误,但无法重现。 【参考方案1】:

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

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

附带说明,Response.End() 也会刷新缓冲区,因此您的 Response.Flush() 是多余的。

【讨论】:

这是文件名:C:\Users\MyName\Documents\Project\MyTest\MyTest\researcherExport.doc,其中不包含空格。 @lohiaguitar91 string downloadName = "Request "+request.RequestID+ "_researchExport.doc"; 似乎会构建一个文件名Request xx_researchExport.doc,其中包含一个空格。 啊是的。我确实删除了现在阅读"Request+request.RequestID+ "_researchExport.doc" 的空间,但仍然没有下载提示。检查了许多不同的资源,看来我正在做的事情应该可行。用 try-catch 块包围它不会产生任何异常。【参考方案2】:

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

【讨论】:

以上是关于Response.WriteFile() - 不工作 asp net mvc 4.5的主要内容,如果未能解决你的问题,请参考以下文章

带有Response.WriteFile但不带有File.Copy的ASP.NET登录失败IOException?

下载Word文档

重剑无锋,大巧不工

重剑无锋 大巧不工

CGRect.offsetBy 不工​​作

重剑无锋,大巧不工