ASP.NET MVC动作过滤器

ASP.NET MVC提供了4种不同的动作过滤器(Aciton Filter)。

1.Authorization Filter

在执行任何Filter或Action之前被执行,用于身份验证

2.Action Filter

在执行Action之前或之后被执行,用于执行的Action需要生成记录或者缓存数据时

3.Result Filter

在执行ActionResult的前后被执行。在View被显示到浏览器之前可以执行一些逻辑运算,或修改ViewResult的输出结果

4.Exception Filter

在Action执行之前或之后或者ActionResult执行之前或之后被执行。在执行中发生异常时,可以使用此Filter指向其他页面来显示错误信息

下面是不同动作过滤器的执行顺序:

OnAuthorization

              ↓

OnActionExecuting

               ↓

执行动作(Action)

               ↓

OnActionExecuted

               ↓

OnResultExecuting

               ↓

执行视图(View)

               ↓

OnResultExecuted

              ↓

OnException

动作过滤器一律使用属性(Attribute)的方式应用在Action之上。eg:

[csharp] view plain copy
 
 print?
  1. [Authorize(Roles="admin")]  
  2. public ActionResult Edit(int id)  
  3. {  
  4.         return View();  
  5. }  


这四种动作过滤器都是.net属性(Attribute)类,只要继承Attribute类并实现与之对应的接口就可以扩展功能。

注:动作过滤器属性也可以用在Controller上,若用在Controller上,则将此属性用在此Controller中的所有Action之上。

Authorization过滤器属性

  • Authorize属性
用户或角色符合要求才能被使用。否则就会跳转到登录页面
其中在web.config文件的system.web类的设定中有一个Authentication设定,其中<forms>部分有一个loginUrl属性可以设定当权限不足时应该跳转的地址,eg:
        
[csharp] view plain copy
 
 print?
  1. <authentication mode="Forms">  
  2.   <forms loginUrl="~/Account/LogOn" timeout="2880" />  
  3. </authentication>  
  • ChildActionOnly属性
 
  • RequiredHttps属性
        应用RequiredHttps属性,让Action仅能显示在https安全登录的状态下。如果用户使用http连接,该Action就会自动转向同一个Action的https网址。
        
[csharp] view plain copy
 
 print?
  1. [RequireHttps]  
  2. public ViewResult Index()  
  3. {  
  4.         ......  
  5.         return View();  
  6. }  
  • ValidateInput属性
原文地址:https://www.cnblogs.com/amylis_chen/p/6145153.html