错误处理捕获View Rendering异常的最后机会

时间:2016-03-10 14:52:02

标签: asp.net-mvc razor error-handling viewrendering

我已ErrorController自定义处理我的网站错误。

非常标准:

public class ErrorController : BaseController
{
    public ActionResult Error404(Exception ex)
    {
        return View();
    }
    public ActionResult Error500(Exception ex)
    {
        return View();
    }
}

但是,如果在View代码中发生了一些渲染异常(这可能会发生,因为页面具有Master页面(主布局)并且可能发生不同),那么我无法捕获该渲染异常。

我真的可以通过实施ActionFilterAttribute.OnResultExecuted来看到这个例外:

    public override void OnResultExecuted(ResultExecutedContext filterContext)
    {
        if (filterContext.Exception != null)
        {
            // not sure what to do here
        } else base.OnResultExecuted(filterContext);
    }

但是在那种情况下,MVC会在发生异常后查找〜/ Shared / Error.cshtml (包括此路径),并且我无法向其提供错误视图呈现异常用户 - "最后机会例外"。

有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:1)

这是一篇关于ASP.Net MVC中异常处理的好文章,应该有帮助

Method 4:- Inheriting from “HandleErrorAttribute”

public class CustomHandleErrorAttribute: HandleErrorAttribute
{
    public override void OnException(ExceptionContext filterContext)
    {
        Exception ex = filterContext.Exception;
        filterContext.ExceptionHandled = true;
        var model = new HandleErrorInfo(filterContext.Exception, "Controller", "Action");

        filterContext.Result = new ViewResult()
        {
            ViewName = "Error",
            ViewData = new ViewDataDictionary(model)
        };
    }
}

然后将其附加到您的基本控制器。