为什么不要使用Response.Close

发布网友 发布时间:2022-04-23 22:37

我来回答

2个回答

热心网友 时间:2023-08-02 20:12

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()方法。

热心网友 时间:2023-08-02 20:12

1.因为:Close()方法会调用 HttpWorkerRequest.CloseConnection() 方法。终止(Terminate)与客户端的套接字连接,并使得服务器,客户端以及之间设施上的缓存(buffer)失效。导致发送到客户端的数据丢失。 2.方法Response.End()是为了兼容经典

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com