【问题标题】:Throw 404 in c# to go to customerror.aspx without 302 and 301在c#中抛出404去customerror.aspx没有302和301
【发布时间】:2018-11-14 16:32:06
【问题描述】:

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

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

如果我使用

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

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

如何删除 302 和 301?

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

【问题讨论】:

    标签: c# .net httpexception


    【解决方案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 中作为子应用程序托管,它将与 / 一起使用

    【讨论】:

    • 问题是定义的错误页面位于 Web 根目录,而我提出错误的页面通常低一到两个目录级别。结果是脚本链接无效。不能在路径中使用 ~/,因为它们不是 asp runat 服务器对象。
    • 我不确定我是否理解这个问题,你不使用 web.config 来定义你的错误页面吗?因为在应用程序的根目录有一个页面 Error404.aspx, 可以在任何子页面中工作
    • 感谢您的帮助。我目前在 web.config 和 IIS
    • 现在似乎可以正常工作,因为错误页面呈现正常。在 404 之前还是得到 302 和 301。也许这无关紧要。
    • 好的,我现在明白了,您使用的是 httpErrors 标签,我的答案是 customErrors 标签。我更新了我的答案以包含 httpErrors 的解决方案。
    猜你喜欢
    • 2018-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-21
    • 2012-01-31
    • 2013-11-26
    • 1970-01-01
    • 2013-03-19
    相关资源
    最近更新 更多