ASP.NET mvc4中的过滤器的使用

2019-05-25 22:31:49王冬梅

 使用这个类的唯一好处是不需要重写和实现不打算使用的方法。除此之外,直接实现过滤器接口没有任何好处

自定义实例:

public class ProfileAllAttribute: ActionFilterAttribute{

    private Stopwatch timer;

    public override void OnActionExecuting(ActionExecutingContext filterContext){

      timer = Stopwatch.StartNew();

    }

 

    public override void OnActionExecuted(ActionExecutedContext filterContext){

      timer.Stop();

      filterContext.HttpContext.Response.Write(

        string.Format("<div>Total elapsed time:{0}</div>", timer.Elapsed.TotalSeconds));

    }

}

public class HomeController : Controller{

    [ProfileAll]

    public ActionResult Index(){ return View();}

}

其它过滤器属性:

public abstract class Controller : ControllerBase, IActionFilter, IAuthenticationFilter, IAuthorizationFilter, IDisposable, IExceptionFilter, IResultFilter, IAsyncController, IController, IAsyncManagerContainer

过滤器的几种实现形式:

①全局过滤器

在FilterConfig中直接注册实现类

②实现接口

③注解

对过滤器执行排序

过滤器是按类型执行的其顺序:授权-》Action-》result。如果有未处理异常,框架在任一阶段都会执行异常过滤器

namespace System.Web.Mvc

{

  // 摘要:表示操作和结果筛选器特性的基类。

  public abstract class FilterAttribute : Attribute, IMvcFilter{

    // 摘要: 获取或设置一个值,该值指示是否可指定筛选器特性的多个实例。

    // 返回结果:如果可指定筛选器特性的多个实例,则为 true;否则为 false。

    public bool AllowMultiple { get; }

    // 摘要: 获取或者设置执行操作筛选器的顺序。

    // 返回结果:执行操作筛选器的顺序。

    public int Order { get; set; }

  }

 
}

内建过滤器

过滤器

描述

RequireHttps

强迫Action使用Https协议

OutputCache

缓存一个Action的

ValidateInputand

ValidationAntiForgeryToken

与安全性有关的授权过滤器

AsyncTimeout

NoAsyncTimeout

用户异步控制器

ChildActionOnlyAttribute

一个支持Html.action和Html.RenderAction辅助器方法的过滤器