错误处理最后一次捕获视图呈现异常的机会
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)
};
}
}
然后将其附加到您的基本控制器。
我有 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)
};
}
}
然后将其附加到您的基本控制器。