【问题标题】:Webforms: 404 error not catched if url has no .aspx extensionWebforms:如果 url 没有 .aspx 扩展名,则未捕获 404 错误
【发布时间】:2013-01-16 16:24:51
【问题描述】:

我有一个 webforms 项目,我想在 Global.asax 中记录所有 404 错误,所以我把这段代码放在那里:

void Application_Error(object sender, EventArgs e)
{
    var exception = Server.GetLastError();
    var httpException = exception as HttpException;
    if (httpException == null)
    {
        Log.Error(string.Format("Unkown error:", Request.Url.AbsoluteUri), exception);
    }
    else if (httpException.GetHttpCode() == 404)
    {
        Log.Warn(string.Format("RequestError 404: {0}", HttpContext.Current.Request.Url.AbsoluteUri));
    }
    else
    {
        Log.Error(string.Format("RequestError {0}: {2}\r\n{1}", httpException.GetHttpCode(), Server.UrlDecode(Request.Headers.ToString()), HttpContext.Current.Request.Url.AbsoluteUri), httpException);
    }
}

这适用于所有扩展名为“.aspx”的请求。没有它或使用另一个扩展,Application_Error 将被绕过。

这是我的web.config

<customErrors defaultRedirect="/500.aspx" mode="Off">
  <error statusCode="404" redirect="/404.aspx"/>
  <error statusCode="500" redirect="/500.aspx"/>
</customErrors>

有什么想法吗?

【问题讨论】:

    标签: c# error-handling webforms


    【解决方案1】:

    在 Global.asax 文件中定义的错误处理程序只会捕获在 ASP.NET 运行时处理请求期间发生的错误。例如,如果用户请求在您的应用程序中没有出现的 .aspx 文件,它将捕获错误。但是,如果用户请求不存在的 .htm 文件,它不会捕获错误。对于非 ASP.NET 错误,您可以在 Internet 信息服务 (IIS) 中创建自定义处理程序。服务器级错误也不会调用自定义处理程序。

    这是http://msdn.microsoft.com/en-us/library/24395wz3(v=vs.100).aspx的摘录

    【讨论】:

      猜你喜欢
      • 2020-01-27
      • 2012-09-10
      • 1970-01-01
      • 1970-01-01
      • 2021-07-04
      • 2011-04-09
      • 2021-01-27
      • 2011-05-06
      • 1970-01-01
      相关资源
      最近更新 更多