zoukankan      html  css  js  c++  java
  • ASP.NET MVC学习笔记-----Filter

    ASP.NET MVC学习笔记-----Filter(1)

    Filter类型 接口 MVC的默认实现 Description
    Authorization IAuthorizationFilter AuthorizeAttribute 最先执行,在其他类型的filter和action方法前执行
    Action IActionFilter ActionFilterAttribute 在action方法执行前和执行后执行
    Result IResultFilter ActionFilterAttribute 在result执行前和执行后执行
    Exception IExceptionFilter HandleErrorAttribute 在抛出异常时执行,(异常发生在action/result/filter)
     
    1.Authorization Filter
    Authorization Filter是所有Filter类型中第一个执行的Filter,它在action方法调用前执行。Authorization Filter需要实现IAuthorizationFilter接口:
    复制代码
    public interface IAuthorzationFilter
    {
         void OnAuthorization(AuthorizationContext context);
    }
    复制代码
    可以看出,我们要实现Authorization机制的代码就需要放在OnAuthorization方法中,而其参数类型AuthorizationContext继承于ControllerContext,如下所示:
    复制代码
     public class AuthorizationContext : ControllerContext
     {   
    
         public AuthorizationContext();   
    
         public AuthorizationContext(ControllerContext controllerContext, ActionDescriptor actionDescriptor);     
         public virtual ActionDescriptor ActionDescriptor { get; set; }
         public ActionResult Result { get; set; }
    
     }
    复制代码
    AuthorzationContext额外提供了Result属性和ActionDescriptor属性,result属性表示授权阶段呈现的ActionResult,而ActionDescriptor则包含了当前执行Action的信息。
    Asp.net MVC给我们提供了一个IAuthorzationFilter的实现AuthorizeAttribute(没错,它是一个Attribute,继承于FilterAttribute),该Attribute可以应用于Controller和Action, 它包含Roles和Users属性,指定特定的角色和用户才可以授权使用。比如:
    复制代码
    public class HomeController : Controller
    {
         [Authorize(Users = "zhang, zheng", Roles = "admin")]
         public ActionResult Index()
         {
              return View();
         }
    }
    复制代码
    以上代码表示只有用户zhang,zheng并且拥有角色admin的用户才可以被授权执行Index Action。

    
    
    2.Exception Filter
    当一个未处理异常抛出时,Exception Filter将会被执行。Exception Filter需要实现IExceptionFilter接口:
    复制代码
    public interface IExceptionFilter
    {
         void OnException(ExceptionContext filerContext);
    }
    复制代码
    ExceptionContext同样继承于ControllerContext,它提供了以下额外的属性:
    属性名 类型 描述
    ActionDescriptor ActionDescriptor 提供当前所执行的Action的信息
    Result ActionResult Exception Filter所呈现的ActionResult
    Exception Exception 未处理的异常
    ExceptionHandled bool 表示是否已有其他filter处理过此异常
    
    
    ExceptionHandled是一个很重要的属性。一般来说,当一个Exception Filter执行时,我们首先需要检查ExceptionHandled属性,如果为true,则表示已有其他filter处理过此异常了,就不需要再次进行处理了,以免覆盖其他filter所解决的Exception。如果为false,则对该Exception进行相应的处理,处理之后将ExceptionHandled属性设置为true。默认的,如果没有Exception Filter将ExceptionHandled属性设置为true, ASP.NET MVC将使用默认的异常处理,即显示我们经常看到的异常页面。
    
    
     
     
     
     
  • 相关阅读:
    经常让程序员恼火的一些事情你是否也遇到过一些?
    CRC文件解压缩问题
    你在淘宝买件东西背后的复杂技术 技术普及帖
    程序员需要戒骄戒躁
    IT路上的应该注意自我规划 学习规划与自我修炼
    腾讯,我最恨别人用枪顶着我的头(转)
    软件管理,软件生命周期,软件过程名词解释
    程序员需要掌握的最终技术是什么? “终极技术”:应对困境的方法和信念
    程序员如何缓解“电脑病”
    新浪微博XSS攻击事件
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3276953.html
Copyright © 2011-2022 走看看