首页 > 代码库 > 学习笔记38_过滤器

学习笔记38_过滤器

Action过滤器:在Action执行之前和执行之后分别干一些事情

Action过滤器要实现IActionFilter。

步骤:

1.在Model文件夹中,添加一个自定义类

public class XXXXXActionFilterAttribute:ActionFilterAttribute

{

  public string Name{get;set;}

  public override void OnActionExecuting(ActionExecutingContext filterContext)

  {

    base.OnAcionExecuting(filterContext);

    ......;

    //例如

    filter.HttpContext.Respone.Wirte("<br/>........");

  }

  public override void OnActionExecuted(ActionExecutedContext filterContext)

  {

    base.OnActionExecuted( filterContext);

    ......;

  }

  

  public override void OnResultExecuting(ActionExecutingContext filterContext)

  {

    base.OnResultExecuting(filterContext);

    ......;

  }

 public override void  OnResultExecuted(ActionExecutedContext filterContext)

  {

    base. OnResultExecuted( filterContext);

    ......;

  }

}

2.使用

在Action方法当中

[ XXXXXActionFilterAttribute("Name")]

public ActionResult Index()

{

  

}

***如果在控制器上放打[ XXXXXActionFilterAttribute("Name")],那么此控制器下的所有Action都会受到影响。

****如果想令所有控制器都打上ActionFilterAttribute,那么,可以到 Clobal.asax中,

FilterConfig.RegisterGlobalFilters(GlobalFilter.Filters),//RegisterGlobalFilters转到定义:

在App_Start->FilterConfig.cs-> 

public static void  RegisterGlobalFilters(....)

{

  //加上

  filters.Add(new XXXXXActionFilterAttribute());

}

*

[AttributeUsage(AttributeTargets.All, AllowMultipute =false,Inherited = true)]

//表示这个FilterAttribute能再那些地方起作用,能不能打多次,即能不能过滤多次,Inherited是否能继承。

public class XXXXXActionFilterAttribute:ActionFilterAttribute{...}

3.使用场合:

用于要检查用户是否登录。

学习笔记38_过滤器