在c#中抛出404去customerror.aspx没有302和301

Throw 404 in c# to go to customerror.aspx without 302 and 301

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

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

如果我使用

抛出 404
throw new HttpException(404, "Not found");

我进入自定义错误页面,但查看响应时发现 302 和 301 永久重定向,然后生成 404。

如何删除 302 和 301?

我在抛出异常之前尝试了 Response.Clear() 并且 Response.StatusCode=404.

默认情况下,当出现 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 中,它将与 / 一起使用