AspNet MVC : 操作/控制器过滤器(action filter)
1.Action Filter
Action Filter提供了在执行action/controller前后对请求/响应修改的能力,可以应用于action和控制器上,作用在控制器上将自动被应用到该控制器下所有的action.
常见的应用场景例如: 用户验证授权, 修改view的返回结果,修改response头,日志记录,异常/错误处理等 。
AspNet MVC包含四种类型的action filter:
a.Auth Filter 验证过滤器,实现IAuthorizationFilter,用于针对action或者controller访问时候的用户身份验证或者授权验证。例如mvc自带的[Authorze]
b.Action Filter 操作过滤器,实现IActionFilter接口,包含一些逻辑,用于Action执行前后前后被调用,可以用于处理修改类似request的参数或者response参数.
c.Result filter 结果过滤器,实现IResultFilter接口,包含一些逻辑,用于直线ViewResult执行前后被调用,常见的应用就是修改返回的view.
d.Exception filter 异常过滤,实现IExceptionFilter,用于action/controller中异常/错误的处理.
默认以上四种类型的filter执行顺序是:
『 Auth ---- Action ---- Result ---- Exception 』
身份验证永远最先被执行,异常处理最后被执行,如果想打破这种默认的执行的顺序,可以通过修改FilterAttribute的Order来实现,FilterAtribute的Order实现与接口IMvcFilter
public interface IMvcFilter{
//
int Order{get;}
}
public class FilterAttribute: Atrribute, IMvcFilter
{
//
public int Order{get; set;}
}
ps:想验证filter指定默认的执行顺序,可以分别实现对应的接口和FilterAttribute接口然后输出order属性看看,例如:
//继承FilterAttribute主要是为了能像属性一样应用fliter
public class AFilterAttribute: FilterAttribute, IActionFilter
{
public void OnActionExecuted(){}
public void OnActionExecuting(){ ==>output :order }
} public class MyController: Controller{
[AFilter]
public string Index(){/}
} 如果想实现全局应用所有请求或者不想这种声明是添加可以通过GlobalFilterCollection添加过滤器.
GlobalFilterCollection ::Add( your filter );
2.自定义action filter
自定义过滤器主要实现对应的过滤器接口就可以了,Auth过滤器,实现IAuthorizationFilterjie接口的OnAuthorization方法就可以了(或者直接继承AuthorieAttribute).Exception过滤器实现IExceptionFilter::OnException方法,如果要实现action/result可以继承ActionFilterAttribute类.
ActionFilterAttribue继承了FilterAttribute,实现了IActionFilter,IResultFilter接口.
FilterAttribute <-- { class: Attribute , Interface:IMvcFilter }
|
|
ActionFilterAttribute <---{ interface: IActionFilter, IResultFilter }
|
|
custom filter
interface: IActionFilter {
Method: OnActionExecuting , OnActionExecuted
}
interace:IResultFilter{
Method: OnResultExecuting/OnResultExecuted
}
自定义过滤器可以实现 OnActionExecuting /OnActionExecuted 用于在action执行前后分别处理一些自定义逻辑,比如修改view data数据
重写OnResultExecuting/OnResultExecuted 用于在view redner前后执行一些自定义逻辑,比如修改呈现的view
AspNet MVC : 操作/控制器过滤器(action filter)的更多相关文章
- ASP.NET MVC 4.0的Action Filter
有时候你想在调用action方法之前或者action方法之后处理一些逻辑,为了支持这个,ASP.NET MVC允许你自定义创建action过滤器.Action过滤器是自定义的Attributes,用来 ...
- [转]ASP.NET MVC 入门9、Action Filter 与 内置的Filter实现(介绍)
有时候你想在调用action方法之前或者action方法之后处理一些逻辑,为了支持这个,ASP.NET MVC允许你创建action过滤器.Action过滤器是自定义的Attributes,用来标记添 ...
- ASP.NET MVC 入门9、Action Filter 与 内置的Filter实现(介绍)
原帖地址:http://www.cnblogs.com/QLeelulu/archive/2008/10/09/1307660.html 有时候你想在调用action方法之前或者action方法之后处 ...
- ASP.NET MVC 入门10、Action Filter 与 内置的Filter实现(实例-防盗链)
于ASP.NET MVC Preview5. 前一篇中我们已经了解了Action Filter 与 内置的Filter实现,现在我们就来写一个实例.就写一个防盗链的Filter吧. 首先继承自Filt ...
- [转]ASP.NET MVC 入门10、Action Filter 与 内置的Filter实现(实例-防盗链)
前一篇中我们已经了解了Action Filter 与 内置的Filter实现,现在我们就来写一个实例.就写一个防盗链的Filter吧. 首先继承自FilterAttribute类同时实现IAction ...
- 返璞归真 asp.net mvc (5) - Action Filter, UpdateModel, ModelBinder, Ajax, Unit Test
原文:返璞归真 asp.net mvc (5) - Action Filter, UpdateModel, ModelBinder, Ajax, Unit Test [索引页] [源码下载] 返璞归真 ...
- AspNet MVC与T4,我定制的视图模板
一. 遇到的问题 文章开头部分想先说一下自己的困惑,在用AspNet MVC时,完成Action的编写,然后添加一个视图,这个时候弹出一个添加视图的选项窗口,如下: 很熟悉吧,继续上面说的,我添加一个 ...
- 使用ASP.NET MVC操作过滤器记录日志(转)
使用ASP.NET MVC操作过滤器记录日志 原文地址:http://www.singingeels.com/Articles/Logging_with_ASPNET_MVC_Action_Filte ...
- [翻译] 使用ASP.NET MVC操作过滤器记录日志
[翻译] 使用ASP.NET MVC操作过滤器记录日志 原文地址:http://www.singingeels.com/Articles/Logging_with_ASPNET_MVC_Action_ ...
随机推荐
- DBI接口和DPI接口的区别
1)DBI接口 A,也就是通常所讲的MCU借口,俗称80 system接口.The lcd interface between host processor and LCM device list a ...
- 【原】centos6.5下cdh4.6 Oozie安装
0.oozie只需安装在一台服务器上,这里选择在namenode上来安装:安装用户为cloud-user 1.安装Oozie包: sudo yum install -y oozie oozie- ...
- 关于用jQuery知识来实现优酷首页轮播图!
▓▓▓▓▓▓ 大致介绍 看到了一个轮播图的思路,就想的自己动手实践一下,总体来说用jQuery实现起来简单多了 如果对代码中使用的方法有疑问,可以参考我的jQuery学习之路(持续更新),里面有讲解: ...
- C# ArrayList 基本用法 分类: C# 2014-09-26 11:03 524人阅读 评论(0) 收藏
首先说明一下ArrayList 与 数组的区别: (1)ArrayList 的容量可以根据需要自由扩充,数组的容量是固定的 (2)ArrayList 只能是一维形式,数组可以是多维的 (3)Array ...
- 吧php脚本打包成 exe程序
操作方法 :FQ哦 https://www.youtube.com/watch?v=UQ3zxqh1YXY 有很多方法可以实现 找了个外国的哥们制作的工具 可以吧文件生成很简单的一个独立EXE文件 下 ...
- [RxJS + AngularJS] Sync Requests with RxJS and Angular
When you implement a search bar, the user can make several different queries in a row. With a Promis ...
- muduo网络库使用心得
上个月看了朋友推荐的mudo网络库,下完代码得知是国内同行的开源作品,甚是敬佩.下了mudo使用手冊和035版的代码看了下结构,感觉是一个比較成熟并且方便使用的网络库.本人手头也有自己的网络库,尽管不 ...
- BINARY and varBINARY
BINARY(n) ,varBINARY(n): N代表字节数 utf8: mysql> CREATE TABLE t (c BINARY()); Query OK, rows affected ...
- ARC和非ARC文件混编
在编程过程中,我们会用到很多各种各样的他人封装的第三方代码,但是有很多第三方都是在非ARC情况下运行的,当你使用第三方编译时出现和下图类似的错误,就说明该第三方是非ARC的,需要进行一些配置. 解决方 ...
- Java基础知识强化之集合框架笔记46:Set集合之TreeSet存储自定义对象并遍历练习2(自然排序:Comparable)
1. TreeSet存储自定义对象并遍历练习2: (1)Student.java package cn.itcast_06; /* * 如果一个类的元素要想能够进行自然排序,就必须实现自然排序接口 * ...