您的位置:首页 > 编程语言 > ASP

ASP.NET MVC : Action过滤器(Filtering)

2016-04-10 16:50 549 查看

http://www.cnblogs.com/QLeelulu/archive/2008/03/21/1117092.html

ASP.NET MVC : Action过滤器(Filtering)

相关文章:

ASP.NET MVC URL Routing 学习

AP.NET MVC : 控制器 和 控制器Actions

ASP.NET MVC 学习: 视图

有时候你想在调用action方法之前或者action方法之后处理一些逻辑,为了支持这个,ASP.NET MVC允许你创建action过滤器。Action过滤器是自定义的Attributes,用来标记添加Action方法之前或者Action方法之后的 行为到控制器类中的Action方法中。

一些可能用到Action过滤器的地方有:

日志

身份验证和授权 - 限制用户的访问

输出缓存 - 保存一个Action的结果

网络爬虫的过滤

本地化

动态Action - 将一个Action注入到控制器中

实现一个Action过滤器

Action过滤器是通过继承ActionFilterAttribute类来实现的一个Attribute类。ActionFilterAttribute 是一个抽象类,提供了两个virtual的方法给我们重写,OnActionExecutingOnActionExecuted

ASP.NET MVC 框架会在调用Action方法之前调用你Action过滤器中的OnActionExecuting方法,在之后调用Action过滤器中的OnActionExecuted方法。当然在创建Action过滤器的时候你不需两个方法都实现。

下面的示例是在调用Action方法之前和之后的日志跟踪:

class LoggingFilterAttribute : ActionFilterAttribute

[DebugFilter(Message = "(CONTROLLER) MyBaseController", Order=2)]

public class MyBaseController : Controller

{

[ControllerAction]

[DebugFilter(Message = "(ACTION) MyBaseController.Index()", Order=2)]

[DebugFilter(Message = "(ACTION) MyBaseController.Index()", Order=1)]

public virtual void Index()

{

RenderView("Index");

}

}

下面的是子控制器类,注意这里重写了OnActionExecuting 方法:

MyDerivedController

下面的是显示trace的视图页:

View

下面是程序运行时的输出结果:

Action Filter 1: (PRE) MyDerviedController.OnActionExecuting VIRTUAL METHOD

Action Filter 2: (PRE) DebugFilter.OnActionExecuting - Order=1 Message='(CONTROLLER) MyBaseController

Action Filter 3: (PRE) DebugFilter.OnActionExecuting - Order=2 Message='(CONTROLLER) MyBaseController

Action Filter 4: (PRE) DebugFilter.OnActionExecuting - Order=1 Message='(CONTROLLER) MyDerivedController

Action Filter 5: (PRE) DebugFilter.OnActionExecuting - Order=2 Message='(CONTROLLER) MyDerivedController

Action Filter 6: (PRE) DebugFilter.OnActionExecuting - Order=1 Message='(ACTION) MyDerivedController.Index()

Action Filter 7: (PRE) DebugFilter.OnActionExecuting - Order=2 Message='(ACTION) MyDerivedController.Index()

Action Filter 8: (ACTION) MyDerivedController.Index()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: