首页 > 代码库 > Asp.Net MVC过滤器

Asp.Net MVC过滤器

在MVC中有如下过滤器

 1.AuthorizeAttribute

 2.ActionFilterAttribute

 3.HandleErrorAttribute

一、首先介绍AuthorizeAttribute,这个就是授权过滤器

1.创建一个类,继承AuthorizeAttribute

2.重写OnAuthorization方法,在方法里面可以验证权限,如Session和Cookie

3.添加标记到方法或类上,如果在方法上添加特性,那么会在添加特性的方法执行前调用OnAuthorization方法。

   如果在类上添加特性,那么在执行类中的所有方法前都会调用OnAuthorization方法。

   如果要在所有控制器类的方法上都调用OnAuthorization方法,则在App_Start下的FilterConfig类下的RegisterGlobalFilters方法里面添加注册。

 1 using System;   2 using System.Collections.Generic;   3 using System.Linq;   4 using System.Web;   5 using System.Web.Mvc;   6    7 namespace 过滤器   8 {   9     public class MyAuthorizeAttribute : AuthorizeAttribute  10     {  11         public override void OnAuthorization(AuthorizationContext filterContext)  12         {  13             //在此可以验证权限,如验证Session和Cookie  14             //可以用filterContext.HttpContext.Session["Key"] 获取Session  15             base.OnAuthorization(filterContext);   16         }  17     }  18 }  

二、ActionFilterAttribute使用跟AuthorizeAttribute类似,执行Action前后和执行View前后过滤器

 1 using System;   2 using System.Collections.Generic;   3 using System.Linq;   4 using System.Web;   5 using System.Web.Mvc;   6    7 namespace 过滤器   8 {   9     public class MyActionFilterAttribute: ActionFilterAttribute  10     {  11         //加载Action前调用  12         public override void OnActionExecuting(ActionExecutingContext filterContext)  13         {  14             //在此也可以进行权限的验证  15             base.OnActionExecuting(filterContext);  16         }  17         //加载Action后调用  18         public override void OnActionExecuted(ActionExecutedContext filterContext)  19         {  20             base.OnActionExecuted(filterContext);  21         }  22         //加载View前调用  23         public override void OnResultExecuting(ResultExecutingContext filterContext)  24         {  25             base.OnResultExecuting(filterContext);  26         }  27         //加载View后调用  28         public override void OnResultExecuted(ResultExecutedContext filterContext)  29         {  30             base.OnResultExecuted(filterContext);  31         }  32     }  33 }  

三、HandleErrorAttribute使用跟上面两个类似,异常处理过滤器

 1 using System;   2 using System.Collections.Generic;   3 using System.Linq;   4 using System.Web;   5 using System.Web.Mvc;   6    7 namespace 过滤器   8 {   9     public class MyHandleErrorAttribute: HandleErrorAttribute  10     {  11         public override void OnException(ExceptionContext filterContext)  12         {  13             Exception ex = filterContext.Exception;  //获取异常  14             //在此可以把异常记录到日志里  15             //跳转到友好页面,避免把错误页显示给用户  16             filterContext.HttpContext.Response.Redirect("/err.html");  17             base.OnException(filterContext);  18         }  19     }  20 } 

过滤器执行顺序:授权验证过滤器——执行Action前后过滤器——加载View前后过滤器

Asp.Net MVC过滤器