【问题标题】:HttpContext.Current.Response.Flush() vs response.redirect falseHttpContext.Current.Response.Flush() vs response.redirect false
【发布时间】:2014-07-26 09:02:47
【问题描述】:

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

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

调查后发现应该修改重定向方式。

当前代码:Response.Redirect(URL)

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

这确实解决了问题,微软也建议: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

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

谢谢。

【问题讨论】:

    标签: c# asp.net multithreading


    【解决方案1】:

    关于Response.Reditect如果你看MSDN Documentation Page方法的签名是

    public void Redirect(
        string url,
        bool 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 有不利影响 应用程序性能,这就是为什么为 建议使用 endResponse 参数。

    【讨论】:

    • @Downvoter,是否愿意在投反对票的同时发表评论?
    • 感谢您提供详细信息,但正如您所见,我并不是在问我们为什么要用户重载重定向方法。我很想知道这是否是最好的方法?还是我应该使用 response.Flush();
    • @TechTurtle,哪个更好是非常流行和基于意见的,但我没有看到很多人使用它,而是主要推荐使用Response.Reditect 方法。
    猜你喜欢
    • 1970-01-01
    • 2012-07-10
    • 1970-01-01
    • 1970-01-01
    • 2020-05-15
    • 1970-01-01
    • 2011-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多