ASP.NET MVC 过滤器
前段时间从外包公司回来,回到公司加入到了公司项目中的开发。看到项目中用到了过滤器,以前没接触过,到网上查了一下,结合项目与自己的理解记录一下。
1、为什么要用到过滤器。2、它能解决什么问题 3、是否会带来新问题,严重不,我们是否能够解决掉?
在实际项目中,稍微像样点的项目总会有一些相关的AOP(面向切面,也叫做面向面)编程的组件,而MVC项目中太关心我们这些农民工啦,不想让MVC开发人员去为了身份验证、日志、异常等部分重复代码。于是我们在MVC项目中就可以直接使用它提供的Fileter特性帮我们解决,不用我们自己去实现复杂的AOP了。
以日志为例:
[LogActionFilter(Message="打开企业列表")]
public ActionResult Index()
{
return View();
}
[LogActionFilter(Message="添加企业")]
public ActionResult Add(Contact contact)
{
return View();
}
public class LogActionFilter : ActionFilterAttribute {
public string Message { get; set; }
public override void OnResultExecuted(ResultExecutedContext filterContext)
{
//记录操作日志,写进操作日志中
var controllerName = filterContext.RouteData.Values["controller"];
var actionName = filterContext.RouteData.Values["action"];
}
}
在合适的地方用到适当的Filter,ASP.NET MVC提供了几个默认的Filter
Filter Type |
实现接口 |
执行时间 |
Default Implementation |
Authorization filter |
IAuthorizationFilter |
在所有Filter和Action执行之前执行 |
AuthorizeAttribute |
Action filter |
IActionFilter |
分别在Action执行之前和之后执行。 |
ActionFilterAttribute |
Result filter |
IResultFilter |
分别在Action Result执行之后和之前 |
ResultFilterAttribute |
Exception filter |
IExceptionFilter |
只有在filter, 或者 action method, 或者 action result 抛出一个异常时候执行
|
HandleErrorAttribute
|
因为ActionFilterAttribute默认实现了IActionFilter和IResultFilter。而ActionFilterAttribute是一个抽象类型,所以不能直接被实例化使用,所以我们想使用的话必须继承一下才能够使用。我们可以重载ActionFilterAttribute类中的以下几个方法:
OnActionExecuting – 在Action执行之前调用。
OnActionExecuted – 在Action执行之后调用。
OnResultExecuting – 在Result产生之前调用。
OnResultExecuted – 在Result产生之前调用。
根据需要,我们可以在重载的方法中写入需要的代码,如上面代码中,我只是在OnResultExecuted方法中写入了一些方法,用来记录操作日志。如果用过滤器进行验证的话,可以在OnActionExecuting方法里面进行一些验证。过滤器是在对请求进行处理时对动作逻辑进行扩展的手段,而不需要把这种逻辑包含在动作方法中。
在ASP.NET MVC中还有哪些场合会用到过滤器呢?
- 判断登录与否或用户权限
- 决策输出缓存
- 防盗链
- 防蜘蛛
- 本地化与国际化设置
- 实现动态Action
在园子里记录一下,方便以后用到后有个简单的回忆提示。
引用:http://www.cnblogs.com/boruipower/archive/2012/11/18/2775924.html