【问题标题】:Custom HTTP error page自定义 HTTP 错误页面
【发布时间】:2011-03-26 09:57:48
【问题描述】:

在 asp.net 中,我可以像这样定义一个自定义错误页面:

    <configuration>
    <system.web>
        <customErrors mode="On">
            <error statusCode="404" redirect="/servererrors/404.aspx" />
        </customErrors>
    </system.web>
</configuration>

现在我的问题是:如果我将 404.aspx 替换为 AnyHTTP.aspx, 并且想获取http错误的编号来概括页面,我如何获得该错误编号?

【问题讨论】:

    标签: c# asp.net vb.net http error-handling


    【解决方案1】:

    在 CustomErrors (ASP.NET 3.5 SP1) 中尝试此设置:

    <customErrors mode="RemoteOnly" defaultRedirect="/servererrors/AnyHTTP.aspx" RedirectMode="ResponseRewrite"/>
    

    作为不同的解决方案,您也可以在 Global.asax 中执行此操作:

    void Application_Error(object sender, EventArgs e)
    {
        Server.Transfer("/servererrors/AnyHTTP.aspx");
    }
    

    然后在您的错误页面上,加载最后一个错误:

    Exception e = Server.GetLastError();
    

    在 Global.asax 文件中使用 Server.Transfer() 很重要;使用 Response.Redirect 将引发 302 错误,您将丢失您想要捕获的错误。

    【讨论】:

      【解决方案2】:

      在你冒险深入做你自己的事情之前,你可以看看http://www.raboof.com/projects/Elmah/...

      【讨论】:

        【解决方案3】:

        我建议不要使用 web.config 方法。 customErrors 重定向到错误页面,这没什么意义。本质上,它首先会说“哦,是的,这会很好,你只需要去这里”,然后然后说“哦,我们没有找到那个”。这真的是一个错误(如果这里没有任何东西,那么为什么服务器告诉我去这里,很明显用户代码看起来你服务器代码搞砸了;他们去了正确的 URI,然后你指导他们发错人了)。

        使用 global.asax 中的 Server.Transfer(),设置默认 HTTPHandler,或设置 IIS 以执行(而不是重定向到)您的 .aspx 或其他文件与您的实现。如果您希望相同的处理程序来管理每个错误,那么您可以,例如,从 global.asax 执行 Server.Transfer(),但包含有关错误类型的查询字符串参数(无论是简单的 HTTP 状态代码,还是更详细的东西),或者在HttpContext中传递信息。

        【讨论】:

          猜你喜欢
          • 2011-01-17
          • 2011-06-05
          • 2013-06-08
          • 2016-12-03
          • 1970-01-01
          • 2023-03-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多