Asp.Net MVC过滤器

Posted ZuQing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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过滤器的主要内容,如果未能解决你的问题,请参考以下文章

Asp.net MVC 之异常处理

Asp.Net MVC3 简单入门详解过滤器Filter

ASP.NET MVC学习之过滤器篇

Asp.Net MVC在过滤器中使用模型绑定

在 asp.net MVC 中使用多过滤器数据表

在ASP.NET MVC的Action中直接接受客户端发送过来的HTML内容片段