MVC 4대 필터 - ExceptionFilter

6640 단어 exception
이 필터는 시스템에 이상이 생겼을 때 터치하여 던진 이상을 처리할 수 있습니다.모든 ExceptionFilter 필터는 IExceptionFilter 인터페이스에서 구현됩니다.
    public interface IExceptionFilter

    {

        void OnException(ExceptionContext filterContext);

    }

OnException 방법을 사용하여 예외에 대한 사용자 정의 처리
MVC4에서 기본 예외 처리 메커니즘이 구현되었습니다. 원본은 다음과 같습니다.
public virtual void OnException(ExceptionContext filterContext)

        {

            if (filterContext == null)

            {

                throw new ArgumentNullException("filterContext");

            }

            if (filterContext.IsChildAction)

            {

                return;

            }



            // If custom errors are disabled, we need to let the normal ASP.NET exception handler

            // execute so that the user can see useful debugging information.

            if (filterContext.ExceptionHandled || !filterContext.HttpContext.IsCustomErrorEnabled)

            {

                return;

            }



            Exception exception = filterContext.Exception;



            // If this is not an HTTP 500 (for example, if somebody throws an HTTP 404 from an action method),

            // ignore it.

            if (new HttpException(null, exception).GetHttpCode() != 500)

            {

                return;

            }



            if (!ExceptionType.IsInstanceOfType(exception))

            {

                return;

            }



            string controllerName = (string)filterContext.RouteData.Values["controller"];

            string actionName = (string)filterContext.RouteData.Values["action"];

            HandleErrorInfo model = new HandleErrorInfo(filterContext.Exception, controllerName, actionName);

            filterContext.Result = new ViewResult

            {

                ViewName = View,

                MasterName = Master,

                ViewData = new ViewDataDictionary<HandleErrorInfo>(model),

                TempData = filterContext.Controller.TempData

            };

            filterContext.ExceptionHandled = true;

            filterContext.HttpContext.Response.Clear();

            filterContext.HttpContext.Response.StatusCode = 500;



            // Certain versions of IIS will sometimes use their own error page when

            // they detect a server error. Setting this property indicates that we

            // want it to try to render ASP.NET MVC's error page instead.

            filterContext.HttpContext.Response.TrySkipIisCustomErrors = true;

        }
Application_Start HandleErrorAttribute GlobalFilterCollection , 。
 ,   
 public class MyExceptionHandleAttribute : HandleErrorAttribute

    {

        public MyExceptionHandleAttribute()

            : base()

        {

        }



        public void OnException(ExceptionContext filterContext)

        {

            base.OnException(filterContext);

            // 

            log.Info(filterContext.Exception);

        }

    }
 GlobalFilterCollection MyExceptionHandleAttribute  

좋은 웹페이지 즐겨찾기