MVC4 4种Filter

1. AuthorizationFilter: 从命名上看这个用于完成授权相关的工作。

  AuthorizationFilter 实现了 IAuthorizationFilter 接口, 如果我们希望执行Action之前做点什么 就用这个AuthorizationFilter 来实现。

     IAuthorizationFilter 接口提供了 OnAuthorization 方法来执行授权操作。

     

   1.1 AuthorizeAttribute: 

        [Authorize(Users = "Foo")]
        [Authorize(Roles = "Bar")]
        public ActionResult Index()
        { 
            return View();
        }

1.2 RequitreHttpsAttribute: 从名称看可以知道 要求请求用户总是以Https 请求的方式访问目标Action。

1.3 ValidateInputAttribute: ValidateInput用于验证请求的输入。

2. ActionFilter:  ActionFilter 实现了接口IActionFilter  ,ActionFilter 是在我们执行Action 前后执行一些额外的操作。

    IActionFilter 具有如下两个方法。 它们分别在Action 执行前后被执行。

    我们可从  ActionExecutedContext 和 ActionExecutingContext 两个上下文对象中获取当前Action的参数列表。 

    public interface IActionFilter
    {
        void OnActionExecuted(ActionExecutedContext filterContext);
        
        void OnActionExecuting(ActionExecutingContext filterContext);
    }

2.1 ActionFilter 的执行机制:当ActionInvoker在执行Action 的时候会根据Order和Scope属性对ActionFilter 进行排序。然后根据当前ControllerContext 和ActionDescripor 创建一个ActionExecutingContext对象,最后将其作为参数依次调用所有的ActionFitler的OnActionExecuting方法。

ActionFilter的OnActionExecuting执行完毕后再执行Action方法,

ActionFilter的ActionExecuted则是在Action执行完毕后再 执行。

2.2 ActionFilter中的异常处理:

    如果ActionFilter链的第一个ActionFilter 在执行OnActionExecuting和ActionExecuted 方法过程中出现异常,那么这个异常会被直接抛出,不过不是第一个

    ActionFilter,抛出异常会被捕获。

3 ExceptionFilter: 异常处理筛选器。 

     IExceptionFilter 具有唯一的方法OnException 用于异常处理

    1. 执行的优先级  Order 和 Scope ,排在后面的优先级更。。

    2. ExceptionContext 的 ExceptionHandled 设置ture 并不能阻止后续ExceptionFiter的执行。

    3. 如果ExceptionFilter在执行OnException过程中出现异常,整个ExceptionFilter链的执行将立即停止,并且抛出异常。

    public interface IExceptionFilter
    {
        void OnException(ExceptionContext filterContext);
    }

4. EntLib 微软企业库 实现自动化异常处理。

5.ResultFilter:Action方法返回一个ActionResult对象。  IResultFilter 提供了OnResultExecuted和 OnResultExecuting 两个方法,

  它们将在 ActionResult 执行前后被执行,如果Action 返回一个ActionResult对象,ActionInvoker在完成Action方法的执行后 会调用返回的ActionResult对象

  的ExecuteResult方法实习对请求的响应。

    public interface IResultFilter
    {
        void OnResultExecuted(ResultExecutedContext filterContext);
        
        void OnResultExecuting(ResultExecutingContext filterContext);
    }
原文地址:https://www.cnblogs.com/dragon-L/p/5277708.html