在ASP.NET MVC应用程序中,当有以下需求时,你可以使用Filter功能:
判断登录与否或用户权限、决策输出缓存、防盗链、防蜘蛛、本地化与国际化设置、实现动态Action
Filter是一种声明式编程方式,在Asp.net MVC中它只能限制于Action(或它的Controller)。
过滤器是一组.NET
特性,MVC在特定运行时点调用这些特性上的指定方法,以此实现功能注入。MVC包含四个基本的过滤器类型:
授权(Authorization)、活动(Action)、结果(Result)以及异常(Exception)。MVC为这四中过滤器提供了接口定义:IAuzhorizationFilter、IActionFilter、IResultFilter、IExceptionFilter,所以MVC在运行时知道如何调用过滤器上的方法。
过滤类型(Filter Type) | 接口(Interface) | 默认实现(Default Implementation) | 描述(Description) |
Authorization | IAuthorizationFilter | AuthorizeAttribute | 首先运行,在其他过滤器的操作方法 |
Action | IActionFilter | ActionFilterAttribute | 运行之前和之后的动作方法 |
Result | IResultFilter | ActionFilterAttribute | 运行前后执行的操作结果 |
Exception | IExceptionFilter | HandleErrorAttribute | 如果只运行另一个过滤器, 操作方法,或行动结果抛出一个异常 |
如果我们要实现自定义的权限验证功能,应该从AuthorizeAttribute类继承,原因在于AuthorizeAttribute已经优化了与OutputCacheAttribute缓存过滤器的协调,避免因缓存原因造成权限验证失效的情况。