8. Filters in ASP.NET MVC 5.0【ASP.NET MVC 5.0中的过滤器】
asp.net filers用来在mvc框架的不同请求处理阶段,注入额外的逻辑。过滤器为横切关注点提供了一种方法(日志记录,授权,缓存)。
在这篇文章中,我将会向你介绍mvc框架支持的各种不同种类过滤器,怎样控制过滤器的执行,怎样创建和使用过滤器。我们可以创建自定义的过滤器。在每一个请求中,控制器中的方法会检查,是否用户是正确授权的,如果是正确授权的用户,就会允许用户执行相应的方法,显示相应的视图给用户。
asp.net支持四种类型的过滤器。authentication过滤器是在asp.net mvc 5中介绍的。每种过滤器都允许你在请求的不同阶段,注入相应逻辑处理。
filters type【过滤器类型】 | interface【接口】 | |
authentication【验证过滤器】 | iauthenticationfilter | 在所有其他的过滤器或者action方法之前执行 |
authorization【授权过滤器】 | iauthorizationfilter | 在允许其他过滤器或者action方法之前,执行 |
action【action过滤器】 | iactionfilter | 在action方法之前或者之后执行 |
result【结果过滤器】 | iresultfilter | 在action方法的执行结果之前或者之后执行 |
exception【异常过滤器】 | iexceptionfilter | 只有在其他过滤器,action方法,或者action的执行结果执行的时候出现异常,才会执行异常过滤器 |
asp.net 中的过滤器类型以及它们的执行顺序
1.authentication filters【验证过滤器】
authentication 过滤器在任何其他过滤器或者action方法之前执行。authentication 过滤器确保你是合法还是非法用户。它实现了iauthenticationfilter接口。
2.authorization filters【授权过滤器】
authorizeattribute和requirehttpsattribute都是authorizatio过滤器的例子。授权过滤器用来检查用户是否有访问权限。授权过滤器实现了iauthorizationfilter接口。
3.action filters【action过滤器】
action过滤器是一个特性,你可以应用到控制器的方法上,也可以应用到整个控制器上。这个过滤器将会在action方法开始执行之前或者开始执行之后执行,以及action执行之后开始调用。
action过滤器实现了iactionfilter接口,有两个方法onactionexecuting和onactionexecuted。onactionexecuting在action方法之前执行,并给了一个机会来取消执行action方法。这些过滤器包含了一些逻辑,在action方法执行之前或者执行之后调用,你可以使用action过滤器,来修改控制器中的action方法返回的视图数据。
4.result filters【结果过滤器】
outputcacheattribute类就是结果过滤器的一个例子。结果过滤器实现了iresultfilter接口。和iactionfilter类似,也有onresultexecuting和onresultexecuted两个方法。这些过滤器包含一些逻辑,在viewresult开始执行之前或者之后调用。你可以使用结果过滤器,来修改视图的结果,在视图呈现到浏览器之前。
5.exception filters【异常过滤器】
handleerrorattribute类是exceptionfilters的一个例子。异常过滤器实现了iexceptionfilter接口,异常过滤器在程序运行的过程中如果发生了未处理的异常就会执行。这些过滤器可以用做异常过滤器,用来处理控制器中的action方法的错误,或者action方法返回结果的错误。你可根据需要以重写这些方法。
好了,上面的理论知识介绍的差不多,我们来创建一个项目,练练手,实际操作一下:
1.在asp.net mvc 5中创建一个自定义的authentication过滤器
创建一个mv项目:
在项目中,创建一个文件夹authdata,添加我们自定义的类authattribute;
iauthenticationfilter接口定义了两个方法:onauthentication和onauthenticationchallenge。onauthentication先执行,用来处理需要的验证逻辑。onauthenticationchallenge用来根据用户验证的结果,进一步做限制处理。在onauthentication方法中,我写了一些代码用来对用户作验证,onauthenticationchallenge中,我写了一些代码,用来执行其他任务。
现在,让我们来测试一下,我们写的自定义验证过滤器;
运行项目,然后注册:
你还可以管理你的账户信息:
2.现在看看 authorization filter:
authorization确保只有经过允许的用户才能访问。这些过滤器在action方法执行之前调用,实现了iauthorizationfilter接口。包含了一个方法onauthorization。
为了验证authorization,我们对刚才的authattribute类作个修改。我们重写了authorizeattribute类中的authorizecore(httpcontextbase httpcontext)方法。
现在打开home控制器,修改代码:
运行项目:输入刚才注册的账号和密码:可以看到授权通过,登录成功了。
还可以这样:在about方法上标识特性,然后允许项目,点击关于按钮,就会弹出来登录页面,让登录:
还可以限制,只让某个用户看到about页面,可以这样做:这里,我只让649713412@qq.com这个用户访问about页面。
现在我们运行项目,重新注册一个账号123456@qq.com.
可以看到,123456@qq.com这个账号访问不了about页面。又弹出来了登录页面。
3.再来看看action filter,又下面的几个action filters:
- output cache:缓存控制器的action
- handle error:当控制器的方法报错的时候,处理错误
- authorize :允许你限制有相应权限的才能访问
output cache
下面的例子,指定返回值将会被缓存5秒
再看看handle error例子:
为了实现handle例子,我们改装一下authattribute类:
注意我们需要创建一个静态的错误页面:
然后运行项目,在地址栏输入:
然后就看到了:错误页面》》
输入大于100的试试:
好了 ,以上就是filters的全部内容,有不明白的,欢迎留言。目前这个0基础系列,暂时先告一段落,我打算写一些高级的内容,后续如果有基础的知识需要讲,就接着这个系列写。谢谢大家支持。
上一篇: 完美ajax类 支持事件
下一篇: 常用SMTP地址
推荐阅读
-
ASP.NET mvc4中的过滤器的使用
-
6. ASP.NET MVC 5.0 中的HTML Helper【HTML 帮助类】
-
ASP.NET MVC 主要的四种过滤器和三种具体实现类
-
ASP.NET mvc4中的过滤器的使用
-
asp.net mvc5中的过滤器重写
-
8. Filters in ASP.NET MVC 5.0【ASP.NET MVC 5.0中的过滤器】
-
ASP.NET MVC 中的过滤器
-
ASP.NET MVC5基础-过滤器(Filters)详解
-
6. ASP.NET MVC 5.0 中的HTML Helper【HTML 帮助类】
-
asp.net mvc 5改进了基于过滤器的身份验证