不要使用Response.Close()
不要使用Response.Close()
不要使用Response.Close()
1 因為:Close()方法會調用HttpWorkerRequest.CloseConnection()方法。終止(Terminate)與客戶端的套接字連接,并使得服務器,客戶端以及之間設施上的緩存(buffer)失效。導致發送到客戶端的數據丟失。
2 方法Response.End()是為了兼容經典ASP程序,在Asp.NET 1.0中引入的,在調用后會拋出ThreadAbortException異常。成功時則中止(abort)當前的線程,處理管道觸發EndRequest事件,不再處理之后的代碼。會以同步的方式將響應內容發送(flush)給客戶端。
由于.NET 設計原因,Response.End()在WebForm框架下可以終止代碼執行,不再處理End()之后的代碼。在MVC框架下則只是返回響應流,不會中止代碼執行。
3 此外還可以使用HttpApplication.CompleteRequest()方法結束請求。
Response.Flush();
this.Context.ApplicationInstance.CompleteRequest();
綜上所述:只有代碼發生錯誤(惡意的攻擊),希望終止對于客戶端的響應/連接時才可以使用Response.Close()
如果你想結束請求,并向客戶端發送請求則應該優先使用HttpApplication.CompleteRequest()方法。
參考文章:
1 http://weblogs.asp.net/hajan/why-not-to-use-httpresponse-close-and-httpresponse-end
文章列表