c# - Webforms : 404 error not catched if url has no .aspx extension

标签 c# error-handling webforms

我有一个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>

任何想法?

最佳答案

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

这是从http://msdn.microsoft.com/en-us/library/24395wz3(v=vs.100).aspx中提取的

关于c# - Webforms : 404 error not catched if url has no .aspx extension,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14362998/

相关文章:

c# - Environment.StackTrace 如何抛出 ArgumentOutOfRangeException?

c# - 使用 Linq 计算 2 个日期之间的对象列表

java - 将变量从一个jsp页面传递到另一个页面?

c# - 如何在回发的文字控件中保留用户输入?

c# - 为什么我的 Rx.NET observable 似乎生成了整个序列两次?

c# - 为什么我们应该避免锁定(this)?

error-handling - 为什么 Rust 在使用 '?' 时会在 Error 类型之间隐式转换,但在返回值中却不会?

php - 在下拉式表单上显示表单错误

.net-2.0 - 如何判断 ASP.net 页面上是否存在具有给定 src 属性的 &lt;script&gt; 标记?

asp.net - 哪种模式最匹配详细的场景,这是一种很好的做法吗?