自定义HTTP错误页面

时间:2010-08-06 15:32:21

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

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

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

现在我的问题:如果我替换,用AnyHTTP.aspx说404.aspx, 并且想要获取http错误的数量以概括页面,我如何得到错误的数字?

3 个答案:

答案 0 :(得分: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错误,您将丢失想要捕获的错误。

答案 1 :(得分:0)

那么你可以在冒险尝试做自己的事情之前先看看http://www.raboof.com/projects/Elmah/ ......

答案 2 :(得分:0)

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

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