在c#中抛出404以转到customerror.aspx,而不使用302和301

在c#中抛出404以转到customerror.aspx,而不使用302和301,c#,.net,httpexception,C#,.net,Httpexception,我在web.config中为404错误和IIS中设置了自定义错误。 我的自定义错误页面工作正常 我希望能够从页面加载事件转到我的自定义错误页面 如果我使用 throw new HttpException(404, "Not found"); 我进入了自定义错误页面,但在查看响应时,我发现了一个302,一个301永久重定向,然后生成了一个404 如何删除302和301 在抛出异常和Response.StatusCode=404之前,我尝试了Response.Clear()。默认情况下,当出现HT

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

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

如果我使用

throw new HttpException(404, "Not found");
我进入了自定义错误页面,但在查看响应时,我发现了一个302,一个301永久重定向,然后生成了一个404

如何删除302和301


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

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

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

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

使用httpErrors标记:

<system.web>
    <customErrors redirectMode="ResponseRewrite">
        <error statusCode="404" redirect="~/Error404.aspx"/>
    </customErrors>
</system.web>
<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中的子应用程序托管的,则它可以使用/问题在于,定义的错误页面位于web根目录,而我引发错误的页面通常较低一到两个目录级别。结果是脚本链接无效。无法在路径中使用~/,因为它们不是asp runat服务器对象。我不确定我是否理解此问题,您是否不使用web.config定义错误页?因为在应用程序的根目录下有一个页面Error404.aspx,它可以从任何子级别页面工作。谢谢您的帮助。我目前在web.config中定义了自定义错误,而在IIS中,它似乎正在工作,因为错误页面呈现正常。仍然在404之前获得302和301。也许这无关紧要。好吧,我现在明白了,你正在使用httpErrors标签,我的答案是customErrors标签。我更新了我的答案,以包含带有httpErrors的解决方案。