在c#中抛出404以转到没有302和301的customerror.aspx

时间:2018-06-05 08:43:32

标签: c# .net httpexception

我在web.config中为404错误和IIS中设置了自定义错误。 我的自定义错误页面工作正常。

我希望能够从页面加载事件转到我的自定义错误页面。

如果我使用

投掷404
throw new HttpException(404, "Not found");

我进入自定义错误页面,但查看响应后,我找到了302并且301永久重定向,然后生成了404。

如何删除302和301?

我在抛出异常之前尝试过Response.Clear(),还有Response.StatusCode = 404。

1 个答案:

答案 0 :(得分:1)

默认情况下,当出现HTTP错误时,IIS会将302重定向到错误页面。 您可以告诉IIS改为使用web.config中定义的错误页面重写响应: 使用customErrors标记:

<system.web>
    <customErrors redirectMode="ResponseRewrite">
        <error statusCode="404" redirect="~/Error404.aspx"/>
    </customErrors>
</system.web>

这仅适用于aspx页面,而不适用于ASP.NET MVC

使用httpErrors标记:

<system.webServer>
    <httpErrors errorMode="Custom" existingResponse="Replace">
        <remove statusCode="404" subStatusCode="-1" />
        <error statusCode="404" path="/Error404.aspx" responseMode="ExecuteURL"/>
    </httpErrors>
</system.webServer>

使用httpErrors,您无法使用〜/来引用应用程序的根目录,但如果您的应用程序未作为IIS中的子应用程序托管,它将与/一起使用