我对MVC ASP.NET很陌生。我读到了OnException覆盖方法。我在想,我是否应该在Controller或Model上设置try catch {throw}以便调用OnException。或者,我尝试不需要catch,如果发生任何异常,将自动调用OnException吗?
谢谢堆。
答案 0 :(得分:2)
“在操作中发生未处理的异常时调用。”
http://msdn.microsoft.com/en-us/library/system.web.mvc.controller.onexception.aspx
如果不处理(即“捕获”)异常,则应调用OnException方法。
答案 1 :(得分:1)
我最终这样做了:
创建了LogAndRedirectOnErrorAttribute类,它使用抽象类FilterAttribute并实现IExceptionFilter,如下所示:
public class LogAndRedirectOnErrorAttribute : FilterAttribute,IExceptionFilter
{
public void OnException(ExceptionContext filterContext)
{
//Do logging here
Util.LogError(Utility.GetExceptionDetails(filterContext.Exception), TraceEventType.Critical.ToString());
//redirect to error handler
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(
new { controller = "Error", action = "Index" }));
// Stop any other exception handlers from running
filterContext.ExceptionHandled = true;
// CLear out anything already in the response
filterContext.HttpContext.Response.Clear();
}
}
在必要时在每个控制器类上,使用以上属性:
[LogAndRedirectOnError]
public class AccountController:Controller
{
.....
}