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的方法给我们重写,OnActionExecuting和OnActionExecuted。
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()
相关文章推荐
- ASP.NET MVC4入门教程(五):从控制器访问数据模型
- Asp.net WebAPi gzip压缩和json格式化
- Asp.net WebAPi gzip压缩和json格式化
- asp.net中子级Repeater获取父级Repeater绑定项的值 Eval
- ASP.NET MVC4入门教程(四):添加一个模型
- ASP.NET MVC4入门教程(二):添加一个控制器
- ASP.NET MVC4入门教程(一):入门介绍
- metasploit 中nessus nessus_connect问题:You must do this before any commands
- metaspolit 基础
- asp.net MVC 和 webForm的区别
- Aspnetpager对GridView分页并顺利导出Excel
- ListBox控件实现上移、下移、循环上移、循环下移操作
- 如何在ASP.NET MVC中使用ajax
- Asp.net动态添加GridView列
- asp.net mvc中自行搭建实现工厂模式的spring.net+三层架构 (15-4-20)
- ASP.NET MVC过滤器
- ASP.NET MVC4入门教程(一):入门介绍
- ASP.NET MVC4入门教程(二):添加一个控制器
- ASP.NET MVC4入门教程(三):添加一个视图
- ASP.NET MVC4入门教程(四):添加一个模型