ASP.NET MVC 入门9、Action Filter 与 内置的Filter实现(介绍)
原帖地址:http://www.cnblogs.com/QLeelulu/archive/2008/10/09/1307660.html
有时候你想在调用action方法之前或者action方法之后处理一些逻辑。为了支持这个。ASP.NET MVC同意你创建action过滤器。Action过滤器是自己定义的Attributes。用来标记加入Action方法之前或者Action方法之后的行为到控制器类中的Action方法中。
一些可能用到Action过滤器的地方有:
- 日志,异常处理
- 身份验证和授权 - 限制用户的訪问
- 输出缓存 - 保存一个Action的结果
- 网络爬虫的过滤
- 本地化
- 动态Action - 将一个Action注入到控制器中
ASP.NET MVC为我们提供了以下的几个Filter接口:
IActionFilter
IAuthorizationFilter
IExceptionFilter
IResultFilter
要实现一个Filter,我们须要继承自FilterAttribute类同一时候实现上面的一个或几个接口:
public class MyFilter : FilterAttribute, IActionFilter, IResultFilter{
}
这几个接口提供的方法例如以下:
HomeController 然后我们执行一下看看结果怎样:
从执行结果我们能够看到。在Controller中重写的Filter会最先执行,然后到应用在类上的Filter。然后再到应用在类方法上的Filter。
而4个接口的方法运行顺序例如以下:
IAuthorizationFilter ->
IActionFilter ->
IResultFilter ->
IExceptionFilter.
而对于同一个Filter。比如
IAuthorizationFilter在MyFilter1和MyFilter2里里面的实现,又依据他们的载入顺序不同而不同。
在BaseController中应用的Filter会被子类继承。假设子类又应用了和基类相同的Filter。则会不运行基类的Filter。比如上面的HomeController应用了MyFilter2,所以调用HomeController的MyFilter2。而不是BaseController的MyFilter2。
这个运行顺序还得大家好好研究才干了解的。
同一时候FilterAttribute还提供了一个Order的属性,用于指定Filter的运行顺序。
每个Action过滤器都有一个 Order 属性。用来决定Action过滤器在该范围内的运行顺序。Order属性必需是0(默认值)或者更大的整数值。省略Order属性则会给该过滤器的Order值为 -1, 表明未指明顺序。
不论什么一个在同一范围的Action过滤器Order设为 -1 的都将按不确定的顺序运行,但在此之前过滤器有一个特定的顺序(请參考上图).
当设置Order属性的值的时候,必需指定一个唯一的值。假设两个或者很多其它的Action过滤器具有同样的Order属性值。将会抛出一个异常。
来看一个演示样例:
[Filter1(Order = 2)][Filter2(Order = 3)]
[Filter3(Order = 1)]
public void Index()
{
RenderView("Index");
}
Filter的运行顺序为:Filter3 => Filter1 => Filter2.
- ASP.NET MVC 入门9、Action Filter 与 内置的Filter实现(介绍)
- ASP.NET MVC 入门9、Action Filter 与 内置的Filter实现(介绍)
- ASP.NET MVC 入门9、Action Filter 与 内置的Filter实现(介绍)
- ASP.NET MVC 入门9、Action Filter 与 内置的Filter实现(介绍)
- ASP.NET MVC 入门 -- 9、Action Filter 与 内置的Filter实现(介绍)
- ASP.NET MVC 入门9、Action Filter 与 内置的Filter实现(介绍)
- ASP.NET MVC 入门9、Action Filter 与 内置的Filter实现(介绍)
- ASP.NET MVC 入门9、Action Filter 与 内置的Filter实现(介绍)
- ASP.NET MVC 入门9、Action Filter 与 内置的Filter实现(介绍)
- ASP.NET MVC 入门9、Action Filter 与 内置的Filter实现(介绍) 【转】
- [转]ASP.NET MVC 入门9、Action Filter 与 内置的Filter实现(介绍)
- ASP.NET MVC 入门9、Action Filter 与 内置的Filter实现(介绍)
- ASP.NET MVC 入门8 Action Filter 与 内置的Filter实现(介绍)
- ASP.NET MVC 入门9、Action Filter 与 内置的Filter实现(介绍)
- ASP.NET MVC 入门 -- 10、Action Filter 与 内置的Filter实现(实例-防盗链)
- ASP.NET MVC 入门10、Action Filter 与 内置的Filter实现(实例-防盗链)
- [转]ASP.NET MVC 入门10、Action Filter 与 内置的Filter实现(实例-防盗链)
- ASP.NET MVC 入门10、Action Filter 与 内置的Filter实现(实例-防盗链)
- ASP.NET MVC 入门10、Action Filter 与 内置的Filter实现(实例-防盗链)
- ASP.NET MVC 入门10、Action Filter 与 内置的Filter实现(实例-防盗链)