这段代码的正确用法是什么?
httpContext.Response.AddHeader("Content-Disposition", "inline; filename=" + HttpUtility.UrlPathEncode(fileName));
httpContext.Response.ContentType = "image/png";
httpContext.Response.AddHeader("Content-Length", new FileInfo(physicalFileName).Length.ToString());
httpContext.Response.TransmitFile(physicalFileName);
httpContext.Response.Flush();
httpContext.Response.End(); //Use it or not?
Run Code Online (Sandbox Code Playgroud)
难道真的很好用.Flush()和.End()?
根据这个你永远不应该使用Response.End()(只在错误或黑客情况下)
但在一些答案中,.End()修正了......?
喜欢这篇文章.
那么使用Response.End与否是合适的?
根据Thomas Marquardt 的说法,您永远不应该使用Response.End(). 相反,您应该使用Context.ApplicationInstance.CompleteRequest(). 勾选此文章为好,这是从微软KB,推荐使用的Application.CompleteRequest()替代Response.End()。
我添加了这个,所以人们不会陷入错误的接受响应:在传输文件后,大多数情况下可能需要Response.End().
如果您使用TransmitFile,或者您决定直接写入输出流,则无关紧要,大多数情况下您希望确保在发送文件后没有人可以写入单个字节.
这一点特别重要,因为在某些时候会在IIS上安装过滤器,全局asax EndRequest上的代码,或者调用代码然后执行更多操作的开发人员,其中任何一个最终都会在输出流中附加更多内容没有你注意到它,它将破坏你传输的文件内容. - CompleteRequest不会从中拯救你,因为它允许你在调用后在响应中添加更多东西.
Response.End()是保证没有其他未来代码更改的唯一方法,或IIS过滤器将按预期操作您的响应.
| 归档时间: |
|
| 查看次数: |
22673 次 |
| 最近记录: |