为什么我在设置404响应代码时得到System.Threading.ThreadAbortException ?

本文关键字:System Threading ThreadAbortException 代码 设置 响应 为什么 | 更新日期: 2023-09-27 18:12:21

我有以下代码在我的应用程序。

如果_showConfiguration为null且Response对象不为null,则状态码设置为404,响应结束。

前面的开发人员就是这样写的。现在,当我们创建一个包含ShowConfiguration对象的新页面时,它总是抛出System.Threading.ThreadAbortException。

我想知道是什么引起的。请建议。

感谢
public ShowConfiguration ShowConfig
{
    get
    {
        if (_showConfiguration == null)
        {
            _showConfiguration = ShowConfigurationCache.GetShowByAliasPath(_aliasPath);

            if (_showConfiguration == null && Response != null)
            {
                Response.Clear();
                Response.StatusCode = 404;
                Response.End();
            }

        }
        return _showConfiguration;
    }
}

为什么我在设置404响应代码时得到System.Threading.ThreadAbortException ?

因为这是ASP.NET中响应的本质。甚至做一个回应。重定向会导致ThreadAbortException,因为它已经完成了对当前请求的处理。为了避免这种情况,将第二个参数设为false,这将避免这种情况。见:https://support.microsoft.com/en-us/kb/312629。

当然,这取决于你的意图,但默认情况下,这是ASP.NET中的行为。

这也可以给你一些关于Response的背景知识。结束:

http://blogs.msdn.com/b/tmarq/archive/2009/06/25/correct-use-of-system-web-httpresponse-redirect.aspx

摘要表示响应。End方法结束当前页面的执行,并将其执行移动到应用程序事件管道中的Application_EndRequest事件。Response之后的任何一行代码。End不执行,但会抛出异常。

你应该做httpcontext . current . applicationinstance . completerrequest。但是,你看到的行为是正常的和预期的