自定义错误页面,通过Controller.OnException覆盖,ASP.NET MVC进行错误记录

时间:2011-10-24 17:13:46

标签: asp.net-mvc

我按照这篇文章来实现自定义错误页面和错误记录。记录工作正常。但是,当发生异常时,自定义错误页面不显示ajax请求,它适用于正常的http完整请求,例如

http://localhost/MyApp/Report/Create/17/,工作,普通网址请求

http://localhost/MyApp/Report/CreateUser/17/json,使用Ajax无法正常工作

ASP.NET MVC HandleError Attribute, Custom Error Pages and Logging Exceptions

 public class BaseController : Controller
    {

 protected override void OnException(ExceptionContext filterContext)
        {
            base.OnException(filterContext);

            _log.Error("Error Logging", filterContext.Exception);

            // Output a nice error page when customErrors's mode = On.
            if (filterContext.HttpContext.IsCustomErrorEnabled)
            {
                filterContext.ExceptionHandled = true;               
                this.View("Error").ExecuteResult(this.ControllerContext);
            }
        }
}

    public class MvcApplication : System.Web.HttpApplication
    {
        public static void RegisterGlobalFilters(GlobalFilterCollection filters)
        {
            //Display custom error page using controller.OnException(), HandleErrorAttribute has to be disabled.
           //filters.Add(new HandleErrorAttribute());
        }

  protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();

            RegisterGlobalFilters(GlobalFilters.Filters);
            RegisterRoutes(RouteTable.Routes);


        }
}

的web.config

<customErrors mode="On">

    </customErrors>

任何想法都会非常感激。

1 个答案:

答案 0 :(得分:0)

AJAX请求与标准HTML GET \ POST请求不同,因为浏览器不提供结果的自动呈现。对于任何后端堆栈(不限于ASP.Net MVC)都是如此。所以在这种情况下,即使响应包含错误页面的完整html(我怀疑ASP.Net MVC为AJAX调用做了),浏览也不会自动重定向到错误页面
解决这个问题的方法是在AJAX中捕获异常并从客户端重定向到错误页面。