2010-08-06 121 views
4

在asp.net,我可以定义自定义错误页是这样的:自定义HTTP错误页

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

现在我的问题:如果我更换,说404.aspx与AnyHTTP.aspx, 和希望得到http错误的数量来概括页面,我怎么得到那个错误数字?

回答

2

尝试在此的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错误,你会失去你想要捕捉的错误。

0

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

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