使用Response.End(false)与ApplicationInstance.CompleteRequest()之间/用例有什么区别?

时间:2013-01-29 19:36:34

标签: asp.net

我遇到了一个SO问题,讨论了使用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
}

这可能有用,但似乎我们在这里编码来处理方法的局限性。并且可能导致一些混乱的代码。

我在这里错过了什么吗?

1 个答案:

答案 0 :(得分: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是一种更好的结束请求的方法。”