簡體   English   中英

正確使用Asp.Net Response.TransmitFile和Response.End()

[英]Correct usage of Asp.Net Response.TransmitFile and Response.End()

這段代碼的正確用法是什么?

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?

使用.Flush().End()真的很好嗎?

根據這個你永遠不應該使用Response.End() (僅在錯誤或黑客情況下)

但在一些答案中, .End()被重新修改......?

喜歡這篇文章。

所以使用Response.End是否合適?

我添加了這個,所以人們不會陷入錯誤的接受響應: 在傳輸文件后,大多數情況下可能需要Response.End()。

如果您使用TransmitFile,或者您決定直接寫入輸出流,則無關緊要,大多數情況下您希望確保在發送文件后沒有人可以寫入單個字節。

這一點特別重要,因為在某些時候會在IIS上安裝過濾器,全局asax EndRequest上的代碼,或者調用代碼然后執行更多操作的開發人員,其中任何一個最終都會在輸出流中附加更多內容沒有你注意到它,它將破壞你傳輸的文件內容。 - CompleteRequest不會從中拯救你,因為它允許你在調用后在響應中添加更多東西。

Response.End()是保證沒有其他未來代碼更改的唯一方法,或IIS過濾器將按預期操作您的響應。

根據Thomas Marquardt的說法,你永遠不應該使用Response.End() 相反,您應該使用Context.ApplicationInstance.CompleteRequest() 查看本文 ,它來自Microsoft KB,建議使用Application.CompleteRequest()而不是Response.End()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM