Application_Error未捕获404类型的错误

时间:2016-10-30 00:12:36

标签: c# asp.net webforms

我想全局捕获这些类型的错误,以便我可以将它们记录到数据库并向用户显示一条很好的消息:500,403和404.我正在使用 Log4Net 处理错误。

void Application_Error(object sender, EventArgs e)
{      
  string redirectUrl = "~/Error/GenericError.aspx"; //I put a breakpoint here...
  var httpException = (HttpException)Server.GetLastError();
  int httpCode = httpException.GetHttpCode();

  //more code here...
}

只有在发生异常时才会触发断点,然后将错误识别为500.

但是,当我拼错网址时,除了404错误之外,我会被 Application_Error 方法捕获。相反,我浏览器显示此页面(见截图)。在这种情况下无法记录错误。

ASP.NET Webform 4.5 。在之前的版本中,例如 ASP.NET 4.0 ,我能够捕获所有3种类型的错误。

有没有办法捕获404错误?

3 个答案:

答案 0 :(得分:0)

通过“Misspell url”我假设你的意思是url的控制器/动作部分(对域或子域),否则这将是一个没有实际意义的问题。如果是这样,那么像K.Tamayo提到的检查客户错误如下:

<configuration> <system.web> <customErrors mode="Off"/> </system.web> </configuration>

答案 1 :(得分:0)

您可以从web.config配置404页面,如下所示

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

在404.aspx中,您可以记录错误并显示您想要的任何内容。

我不确定为什么Application_Error没有被触发,但是我认为它应该在发生服务器端异常时起作用,但是根据这个问题的答案,它应该可以工作

Best way to implement a 404 in ASP.NET

答案 2 :(得分:0)

一些请求由框架本身管理。因此它不会出现 Application_Error

如果要捕获 Application_Error 中的所有错误,请在 web.config

中添加以下内容
i + 1

在下面的线程中查找详细响应。

https://stackoverflow.com/a/11258217/7013033