错误处理最后一次捕获视图呈现异常的机会

Error handling last chance to catch View Rendering exception

我有 ErrorController 可以自定义处理我的网站错误。

非常标准:

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

但是,如果在视图代码中出现某些渲染异常(这可能会发生,因为页面有母版页(母版布局)并且可能会发生不同),那么我无法捕捉到该渲染异常。

我真的可以看到实施 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(包括此路径),我无法提供错误视图向用户呈现异常 - "Last chance exception".

有什么办法可以解决吗?

这是一篇关于 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)
        };
    }
}

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