HttpContext.Current.Response.Flush()vs response.redirect false

时间:2014-07-26 09:02:48

标签: c# asp.net multithreading

我们被告知该网站有以下错误:

Exception Thread was being aborted., ,    at System.Threading.Thread.AbortInternal()
at System.Threading.Thread.Abort(Object stateInfo)
at System.Web.HttpResponse.End()

Upoin调查我们发现应该修改重定向方法。

当前代码:Response.Redirect(URL)

应通知为:Response.Redirect(URL, false)

这确实解决了这个问题,Microsoft也提出了建议:http://support.microsoft.com/kb/312629/en-us

但是我们也遇到了以下代码:

response.Flush();                   
HttpContext.Current.Response.Flush();
HttpContext.Current.Response.SuppressContent = true;
HttpContext.Current.ApplicationInstance.CompleteRequest();

参考:http://dotnetplussqlserver.blogspot.in/2014/01/excel-download-responseend-throwing.html

有人可以帮助我们澄清哪种方法更好吗?一个人对另一个人有什么重要意义? 我们只想要简单的重定向。

谢谢。

1 个答案:

答案 0 :(得分:-1)

如果查看方法的MSDN Documentation Page签名,请关于Response.Reditect

public void Redirect(
    string url,
    bool endResponse
)

endResponse的用途

  

endResponse       键入:System.Boolean

Indicates whether execution of the current page should terminate.

因此,当您说Response.Reditect(URL, false)时,它会直接重定向到提及的URL,而不会进一步处理当前页面。

来自文档页面的引用:

  

在页面处理程序中使用此方法终止请求时   一页并开始另一页的新请求,将endResponse设置为   false然后调用CompleteRequest方法。如果指定true   对于endResponse参数,此方法调用End方法   原始请求,抛出ThreadAbortException异常   当它完成。此异常对Web有不利影响   应用程序性能,这就是为什么传递false的原因   建议使用endResponse参数。