ASP.NET MVC OnException - Try catch required?

2019-05-25 08:39发布

问题:

I'm pretty new to MVC ASP.NET. I read about OnException override method. I'm thinking, whether I should put try catch {throw} on Controller or Model in order for OnException to be invoked. OR, I try catch not required, OnException will be invoked autmatically if any exception occurs?

Thanks Heaps.

回答1:

"Called when an unhandled exception occurs in the action."

http://msdn.microsoft.com/en-us/library/system.web.mvc.controller.onexception.aspx

If you don't handle (i.e. "catch") an exception, the OnException method should be called.



回答2:

I ended up doing this:

Created LogAndRedirectOnErrorAttribute class that uses abstract class FilterAttribute and implements IExceptionFilter as shown below:

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();
        }
    }

And on Each Controller Class where necessary, use the above attribute:

[LogAndRedirectOnError]
public class AccountController:Controller
{
.....
}