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:

  1. Output Cache:缓存控制器的Action
  2. Handle Error:当控制器的方法报错的时候,处理错误
  3. Authorize :允许你限制有相应权限的才能访问

Output Cache

下面的例子,指定返回值将会被缓存5秒

 

 

 

再看看Handle Error例子:

为了实现Handle例子,我们改装一下AuthAttribute类:

注意我们需要创建一个静态的错误页面:

 

 然后运行项目,在地址栏输入

 

 然后就看到了:错误页面》》

 

 输入大于100的试试:

 

 

 

 

 好了 ,以上就是Filters的全部内容,有不明白的,欢迎留言。目前这个0基础系列,暂时先告一段落,我打算写一些高级的内容,后续如果有基础的知识需要讲,就接着这个系列写。谢谢大家支持。

 

转载于:https://www.cnblogs.com/caofangsheng/p/10574559.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值