我遇到了一个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
}
这可能有用,但似乎我们在这里编码来处理方法的局限性。并且可能导致一些混乱的代码。
我在这里错过了什么吗?
答案 0 :(得分:3)
从文章:“而不是使用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
来自文章:“HttpApplication.CompleteRequest是一种更好的结束请求的方法。”