如何使用HandleErrorAttribute从.net mvc3全局过滤器记录404错误?

时间:2011-06-20 12:26:04

标签: asp.net asp.net-mvc asp.net-mvc-3 log4net

我正在尝试从 HandleErrorAttribute 中从我的派生类中记录404错误。

这是我的班级:

public class LogExceptionAttribute : HandleErrorAttribute
{
    public override void OnException(ExceptionContext exceptionContext)
    {
        Log.LogException(exceptionContext.Exception, exceptionContext.Exception.Message);
        base.OnException(exceptionContext);
    }
}

我在应用程序中得到所有异常,但我没有得到404错误。我想获得所有类型的错误,例外。

3 个答案:

答案 0 :(得分:5)

您需要一个最后注册的catchall路由,然后在控制器记录错误后以404响应:

 routes.MapRoute(
                                "NotFound", 
                                "{*url}", 
                               new {controller = "NotFound", action = "index"}
                               )


public class NotFoundController: Controller 
{
    public ActionResult Index(string url)
    {
            Log.Warn(this, string.Format("404 Request Not Found: {0}", url));
            Response.StatusCode = 404;
            var model = new NotFoundViewModel
                            {
                                Title = "Sorry but the page you are looking for does not exist",
                                Message = new HtmlString("Please <a href='/'>click here</a> to return to the home page")
                            };

            return View("404", model);
     }

}

答案 1 :(得分:2)

您仍然可以捕获Application_Error中的所有错误。您还可以通过修改Web.config文件中的customErrors部分来专门处理404错误。

答案 2 :(得分:0)

如果你想了解幕后发生的事情,这篇文章还有一些你可能会觉得有用的信息:

Error Handling in ASP.NET MVC