ASP.NET MVC : Action过滤器(Filtering)
2008-03-21 22:19
477 查看
相关文章:
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方法之前和之后的日志跟踪:
public class LoggingFilterAttribute : ActionFilterAttribute
public class HomeController : Controller
public class HomeController : Controller
public class DebugFilterAttribute : ActionFilterAttribute
public class ThrowExceptionFilter : DebugFilterAttribute
[DebugFilter(Message = "(CONTROLLER) MyBaseController", Order = 1)]
[DebugFilter(Message = "(CONTROLLER) MyBaseController", Order=2)]
public class MyBaseController : Controller
[DebugFilter(Message = "(CONTROLLER) MyDerivedController", Order = 2)]
[DebugFilter(Message = "(CONTROLLER) MyDerivedController", Order=1)]
public class MyDerivedController : MyBaseController
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Attribute Filter Test</title>
</head>
<body>
<form id="form1" runat="server">
<div>
Hello World
</div>
</form>
</body>
</html>
下面是程序运行时的输出结果:
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()
注:本文参考自http://quickstarts.asp.net/3-5-extensions/mvc/ActionFiltering.aspx
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方法之前和之后的日志跟踪:
public class LoggingFilterAttribute : ActionFilterAttribute
public class HomeController : Controller
public class HomeController : Controller
public class DebugFilterAttribute : ActionFilterAttribute
public class ThrowExceptionFilter : DebugFilterAttribute
[DebugFilter(Message = "(CONTROLLER) MyBaseController", Order = 1)]
[DebugFilter(Message = "(CONTROLLER) MyBaseController", Order=2)]
public class MyBaseController : Controller
[DebugFilter(Message = "(CONTROLLER) MyDerivedController", Order = 2)]
[DebugFilter(Message = "(CONTROLLER) MyDerivedController", Order=1)]
public class MyDerivedController : MyBaseController
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Attribute Filter Test</title>
</head>
<body>
<form id="form1" runat="server">
<div>
Hello World
</div>
</form>
</body>
</html>
下面是程序运行时的输出结果:
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()
注:本文参考自http://quickstarts.asp.net/3-5-extensions/mvc/ActionFiltering.aspx
相关文章推荐
- ASP.NET MVC : Action过滤器(Filtering)
- ASP.NET MVC : Action过滤器(Filtering)
- ASP.NET MVC : Action过滤器(Filtering)
- [导入]ASP.NET MVC : Action过滤器(Filtering)
- Action Filtering in ASP.NET MVC Applications
- ASP.NET MVC的Action拦截器(过滤器)ActionFilter
- 【MVC 过滤器的应用】ASP.NET MVC 如何统计 Action 方法的执行时间
- ASP.NET MVC笔记 之 Action 过滤器
- Asp.Net MVC 过滤器
- 【转】ASP.NET MVC 过滤器Filter
- ASP.NET MVC 过滤器Filter
- [翻译] 使用ASP.NET MVC操作过滤器记录日志
- 【转载】ASP.NET MVC的过滤器
- [ASP.NET MVC 小牛之路]10 - Controller 和 Action (2)
- (推荐)第15章 扩展ASP.NET MVC (IModelBinder、过滤器)
- asp.net mvc下标记一个action同时可以接受httpget和httppost
- ASP.NET MVC中默认Model Binder绑定Action参数为List、Dictionary等集合的实例
- ASP.NET MVC 中 如何将同一个form post到不同的action
- ASP.NET MVC动作过滤器
- ASP.NET MVC中Action实现页面跳转