过滤器

什么是过滤器?

过滤器(Filter) 主要的作用大致可以理解为把我们的附加逻辑注入到MVC框架的请求处理。

在ASP.NET MVC的请求处理中一种有19个管道事件分别是

  1. BeginRequest:HTTP管道开始处理请求时,会触发BeginRequest事件
  2. AuthenticateRequest:安全模块对请求进行身份验证时触发该事件
  3. PostAuthenticateRequest:安全模块对请求进行身份验证后触发该事件
  4. AuthorizeRequest:安全模块对请求进程授权时触发该事件
  5. PostAuthorizeRequest:安全模块对请求进程授权后触发该事件
  6. ResolveRequestCache:缓存模块利用缓存直接对请求进程响应时触发该事件
  7. PostResolveRequestCache:缓存模块利用缓存直接对请求进程响应后触发该事件
  8. PostMapRequestHandler:对于访问不同的资源类型,ASP.NET具有不同的HttpHandler对其进程处理。对于每个请求,ASP.NET会根据扩展名选择匹配相应的HttpHandler类型,成功匹配后触发该事件
  9. AcquireRequestState:状态管理模块获取基于当前请求相应的状态(比如SessionState)时触发该事件
  10. PostAcquireRequestState:状态管理模块获取基于当前请求相应的状态(比如SessionState)后触发该事件
  11. PreRequestHandlerExecute:在实行HttpHandler前触发该事件
  12. PostRequestHandlerExecute:在实行HttpHandler后触发该事件
  13. ReleaseRequestState:状态管理模块释放基于当前请求相应的状态时触发该事件
  14. PostReleaseRequestState:状态管理模块释放基于当前请求相应的状态后触发该事件
  15. UpdateRequestCache:缓存模块将HttpHandler处理请求得到的相应保存到输出缓存时触发该事件
  16. PostUpdateRequestCache:缓存模块将HttpHandler处理请求得到的相应保存到输出缓存后触发该事件
  17. LogRequest:为当前请求进程日志记录时触发该事件
  18. PostLogReques:为当前请求进程日志记录后触发该事件
  19. EndRequest:整个请求处理完成后触发该事件

过滤器是.NET的注解属性(Attribute),它们对请求管道添加了额外的步骤。

过滤器分类

MVC框架一共支持6种不同类型的过滤器

过滤器类型 接口 需实现 功能介绍
认证过滤器 IAuthenticationFilter OnAuthentication、OnAuthenticationChallenge 在任何其他过滤器或动作方法之前运行,但在授权过滤器之后可再次运行
授权过滤器 IAuthorizationFilter OnAuthorization 在认证过滤器之后,在其他过滤器或方法前运行
动作过滤器 IActionFilter OnActionExecuted、OnActionExecuting 在方法之前及之后运行
结果过滤器 IResultFilter OnResultExecuted、OnResultExecuting 在结果被执行之前和之后运行
异常过滤器 IExceptionFilter HandleErrorAttribuite 仅在另一个过滤器、方法或结果抛出异常时运行
重载过滤器 IOverrideFilter FiltersToOverride 当你需要方法仅受直接运行在它上面的过滤器影响时使用

重载过滤器认证过滤器是MVC5的新特性

使用过滤器

在MVC中系统自带了一些常规的过滤器比如如果我们想过滤get请求就可以用HttpPost过滤器。

如果我们想过滤某个方法让其只能使用Post请求我们可以这么做。

首先我们先新建一个MVC的项目,为了方便演示我们直接创建自带的模板项目。

我们来看看使用过滤器之前的运行效果

现在我们加上过滤器

public class HomeController : Controller
{ public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult About()
{
ViewBag.Message = "Your application description page."; return View();
} public ActionResult Contact()
{
ViewBag.Message = "Your contact page."; return View();
}
}

那么现在我们的About方法就只能通过Post请求来访问



我们看到通过Get请求我们访问的就是404了

为了认证是否只有Post请求可以访问,我又试着发了个Post请求我们对比一下

Get:

Psot:

现在我们知道了如果在某个方法中添加过滤器,但是我们有个问题,如果像授权过滤器这种,我们要一个个方法去加不是特别麻烦吗?那我们该怎么做呢?这个时候我们可以直接在控制器最外面打上标记

    [Authorize]
public class HomeController : Controller
{ public ActionResult Index()
{
return View();
} public ActionResult About()
{
ViewBag.Message = "Your application description page."; return View();
} public ActionResult Contact()
{
ViewBag.Message = "Your contact page."; return View();
}
}

现在我们访问这些方法就会进行校验就必须先登录才能访问,我们再来看一下效果

当然我们还能组合使用过滤器比如

public class HomeController : Controller
{ public ActionResult Index()
{
return View();
}
[Authorize]
[HttpPost]
public ActionResult About()
{
ViewBag.Message = "Your application description page."; return View();
} public ActionResult Contact()
{
ViewBag.Message = "Your contact page."; return View();
}
}

我们再来看看我们使用Post请求后会立即跳转到登录页进行认证

好了我们本次的过滤器简介就先介绍到这里,下一章开始我带大家来领略不同过滤器的具体用法

开新坑了,最开始只把写博客当成一种消遣,现在慢慢养成一种习惯了吧,也希望MVC系列大家能够喜欢,我是个菜鸡如果有写的不好的地方还望大家多多海涵

笨鸟先飞之ASP.NET MVC系列之过滤器(01过滤器简介)的更多相关文章

  1. 笨鸟先飞之ASP.NET MVC系列之过滤器(02授权过滤器)

    授权过滤器 概念介绍 在之前的文章中我们已经带大家简单的了解了下过滤器,本次我们开始介绍授权过滤器. 我们之前提到过授权过滤器在认证过滤器之后,其他过滤器和方法被调用之前运行,而授权过滤器和它名字的含 ...

  2. 笨鸟先飞之ASP.NET MVC系列之过滤器(03动作过滤器过滤器)

    概念介绍 动作过滤器应该是我们平常工作中需要用到最多的过滤器了,动作过滤器,主要在我们的动作方法执行前后执行. 如果我们需要创建动作过滤器需要实现IActionFilter接口. 我们看到该接口里有两 ...

  3. 笨鸟先飞之ASP.NET MVC系列之过滤器(04认证过滤器过滤器)

    概念介绍 认证过滤器是MVC5的新特性,它有一个相对复杂的生命周期,它在其他所有过滤器之前运行,我们可以在认证过滤器中创建一个我们定义的认证方法,也可以结合授权过滤器做一个复杂的认证方法,这个方法可以 ...

  4. 笨鸟先飞之ASP.NET MVC系列之过滤器(05结果过滤器)

    概念介绍 结果过滤器看名字就知道这个过滤器是针对方法所产生结果的,结果过滤器,主要在我们的动作方法结果返回前后执行. 如果我们需要创建结果过滤器需要实现IResultFilter接口. namespa ...

  5. 笨鸟先飞之ASP.NET MVC系列之过滤器(06异常过滤器)

    概念介绍 异常过滤器主要在我们方法中出现异常的时候触发,一般我们用 异常过滤器 记录日志,或者在产生异常时做友好的处理 如果我们需要创建异常过滤器需要实现IExceptionFilter接口. nam ...

  6. 笨鸟先飞之ASP.NET MVC系列之过滤器(04认证过滤器)

    概念介绍 认证过滤器是MVC5的新特性,它有一个相对复杂的生命周期,它在其他所有过滤器之前运行,我们可以在认证过滤器中创建一个我们定义的认证方法,也可以结合授权过滤器做一个复杂的认证方法,这个方法可以 ...

  7. 【ASP.NET MVC系列】浅谈ASP.NET MVC 控制器

    ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...

  8. 【ASP.NET MVC系列】浅谈Google Chrome浏览器(操作篇)(下)

    ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...

  9. 【ASP.NET MVC系列】浅谈NuGet在VS中的运用

    一     概述 在我们讲解NuGet前,我们先来看看一个例子. 1.例子: 假设现在开发一套系统,其中前端框架我们选择Bootstrap,由于选择Bootstrap作为前端框架,因此,在项目中,我们 ...

随机推荐

  1. jmeter系列-------脚本调试

    1.调试的时候 可以只跑需要调试的接口,禁用其他的接口 2.每个接口都需要增加断言眼,保证脚本的结果的正确性 3.验证脚本的可靠性,可以切换用户(测试变量)来进行调试 4.使用Debug Sample ...

  2. 性能测试系列学习 day1

    性能测试的最终目标是为了最大限度的满足用户的需求,我们通常为了达到以下目标而进行性能测试: (1)评估系统的能力:测试中得到的负荷和响应时间数据可以被用于验证所计划的模型的能力,并帮助作出决策: (2 ...

  3. vue中引入swiper(vue中的滑块组件vue-awesome-swiper)

    第一步安装 npm install vue-awesome-swiper --save 第二部在main.js中引入 import VueAwesomeSwiper from 'vue-awesome ...

  4. Mysql介绍和实践总结

    本文首先介绍mysql的安装和基本使用.进阶操作.讲解mysql的导入导出和自动备份,然后介绍安全模式修改密码和mysql的全文本搜索功能,最后记录了个人使用mysql中遇到的问题集. 开始安装: s ...

  5. Java中的异常和处理详解

    简介 程序运行时,发生的不被期望的事件,它阻止了程序按照程序员的预期正常执行,这就是异常.异常发生时,是任程序自生自灭,立刻退出终止,还是输出错误给用户?或者用C语言风格:用函数返回值作为执行状态?. ...

  6. Day-9: 面对对象高级编程

    数据封装.继承和多态只是面向对象编程中最基础的3个概念. 下面整理面向对象高级编程的更为强大的技巧. 使用__slots__:Python属于动态语言,可以允许已创建好的类动态地绑定任何属性和方法.但 ...

  7. Window下SVN服务器搭建以及客户端使用

    一.下载 上一篇博客是关于Jenkins的内容,在Jenkins自动化编译时可能会自动获取版本更新进行build,那就需要用到版本更新的工具.这里使用VisualSVN Server来作为搭建svn的 ...

  8. 简单的独享smb

    1.是这样的,因为办公区域有一个千兆的交换机,但是我的台式机硬盘有点小,500G的,就把一个旧的台式网卡换成了千兆的,装了个CentOS6.5,最小化的,装了个samba,就开始用了: 2.由于是自己 ...

  9. 201521123023《Java程序设计》第8周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 1.2 选做:收集你认为有用的代码片段 2. 书面作业 本次作业题集集合 1.List中指定元素的删除(题目4 ...

  10. 201521123017 《Java程序设计》第14周学习总结

    1. 本周学习总结 2. 书面作业 Q1.MySQL数据库基本操作 建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现自己的学号.姓名) 在自己建立的数据库上执行常见SQL语句(截图) - ...