3

我遇到了一个 SO question,该问题讨论了在被调用时ApplicationInstance.CompleteRequest()避免ThreadAbortException被抛出的用法。Response.End()

过去,为了避免我上面提到的异常错误,我使用了这个重载:Response.End(false).

我试图了解这两种方法之间的区别。为什么我会选择使用ApplicationInstance.CompleteRequest()代替Response.End(false)

编辑:

我知道这ApplicationInstance.CompleteRequest()是更正确的做事方式,但是调用Response.End(true)缺少的一个功能是处理后面的其余代码。有时,我们不想继续处理,而是想立即结束执行。

也许在这里回答我自己的问题,但也许正确的做事方式是编写代码,以便在结束响应(而不是中止线程)时,没有更多的代码行需要处理。

一个例子:

[DO SOME WORK]
if ([SOME CONDITION])
{
     ApplicationInstance.CompleteRequest();
}
else
{
    //continue processing request
}

这可能有效,但似乎我们在这里编码是为了处理该方法的局限性。并可能导致一些混乱的代码。

我在这里错过了什么吗?

4

1 回答 1

3

http://weblogs.asp.net/hajan/archive/2010/09/26/why-not-to-use-httpresponse-close-and-httpresponse-end.aspx

来自文章:“而不是使用 HttpResponse.End 和 HttpResponse.Close 方法,最好是使用 HttpApplication.CompleteRequest 方法,这样缓冲在服务器、客户端或两者之间的响应数据不会得到掉了。”

protected void Page_Load(object sender, EventArgs e)
{
    Response.Write("Hello Hajan");
    Response.End();            
    Response.Write("<br />Goodbye Hajan");
}
Output: Hello Hajan

protected void Page_Load(object sender, EventArgs e)
{
    Response.Write("Hello Hajan");
    this.Context.ApplicationInstance.CompleteRequest();
    Response.Write("<br />Goodbye Hajan");
}

Output: Hello Hajan 
Goodbye Hajan

http://blogs.msdn.com/b/aspnetue/archive/2010/05/25/response-end-response-close-and-how-customer-feedback-helps-us-improve-msdn-documentation.aspx

来自文章:“HttpApplication.CompleteRequest 是结束请求的更好方法。”

于 2013-01-29T20:53:43.680 回答