zoukankan      html  css  js  c++  java
  • 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前后过滤器

  • 相关阅读:
    JAXB
    webservice引用spring的bean
    org.apache.cxf.interceptor.Fault: No such operation
    org.apache.cxf.transport.servlet.CXFServlet cannot be cast to javax.servlet.Servlet
    Java常用jar包用途
    访问者模式
    模板模式
    策略模式
    状态模式
    代理模式
  • 原文地址:https://www.cnblogs.com/zuqing/p/5838043.html
Copyright © 2011-2022 走看看