Response.WriteFile() — not working asp net mvc 4.5

我是研究僧i 提交于 2019-12-18 09:48:13

问题


I've looked at many resources and the following should work, however my save as dialog box is never showing (not browser specific):

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

The file definitely exists. I've also tried the following:

  1. Using Response.TransmitFile(FileName) instead

  2. Leaving out Response.End()

  3. Leaving out the Content-Length header

  4. Using this.ControllerContext.HttpContext.Response

Any help would be greatly appreciated


回答1:


Not sure if it's your only problem, but the file name in the Content-Disposition header is supposed to be a quoted-string, so you'll need to add quotes around it, particularly since it contains spaces;

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

On a side note, Response.End() also flushes the buffer, so your Response.Flush() is redundant.




回答2:


Solved the issue. I was using Ajax to call this function from one of my views. This didn't work (I am not sure why), but I think it may be because I have multiple controllers. Calling this from @HTML.ActionLink() had the prompt display properly.



来源:https://stackoverflow.com/questions/15458477/response-writefile-not-working-asp-net-mvc-4-5

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!