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,其中不包含空格。 @lohiaguitar91string 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的主要内容,如果未能解决你的问题,请参考以下文章