ASP.NET MVC OnException - 尝试catch需要吗?

时间:2011-04-20 23:12:32

标签: asp.net-mvc-3

我对MVC ASP.NET很陌生。我读到了OnException覆盖方法。我在想,我是否应该在Controller或Model上设置try catch {throw}以便调用OnException。或者,我尝试不需要catch,如果发生任何异常,将自动调用OnException吗?

谢谢堆。

2 个答案:

答案 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
{
.....
}