笨鸟先飞之ASP.NET MVC系列之过滤器(01过滤器简介)
过滤器
什么是过滤器?
过滤器(Filter) 主要的作用大致可以理解为把我们的附加逻辑注入到MVC框架的请求处理。
在ASP.NET MVC的请求处理中一种有19个管道事件分别是
- BeginRequest:HTTP管道开始处理请求时,会触发BeginRequest事件
- AuthenticateRequest:安全模块对请求进行身份验证时触发该事件
- PostAuthenticateRequest:安全模块对请求进行身份验证后触发该事件
- AuthorizeRequest:安全模块对请求进程授权时触发该事件
- PostAuthorizeRequest:安全模块对请求进程授权后触发该事件
- ResolveRequestCache:缓存模块利用缓存直接对请求进程响应时触发该事件
- PostResolveRequestCache:缓存模块利用缓存直接对请求进程响应后触发该事件
- PostMapRequestHandler:对于访问不同的资源类型,ASP.NET具有不同的HttpHandler对其进程处理。对于每个请求,ASP.NET会根据扩展名选择匹配相应的HttpHandler类型,成功匹配后触发该事件
- AcquireRequestState:状态管理模块获取基于当前请求相应的状态(比如SessionState)时触发该事件
- PostAcquireRequestState:状态管理模块获取基于当前请求相应的状态(比如SessionState)后触发该事件
- PreRequestHandlerExecute:在实行HttpHandler前触发该事件
- PostRequestHandlerExecute:在实行HttpHandler后触发该事件
- ReleaseRequestState:状态管理模块释放基于当前请求相应的状态时触发该事件
- PostReleaseRequestState:状态管理模块释放基于当前请求相应的状态后触发该事件
- UpdateRequestCache:缓存模块将HttpHandler处理请求得到的相应保存到输出缓存时触发该事件
- PostUpdateRequestCache:缓存模块将HttpHandler处理请求得到的相应保存到输出缓存后触发该事件
- LogRequest:为当前请求进程日志记录时触发该事件
- PostLogReques:为当前请求进程日志记录后触发该事件
- 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过滤器简介)的更多相关文章
- 笨鸟先飞之ASP.NET MVC系列之过滤器(02授权过滤器)
授权过滤器 概念介绍 在之前的文章中我们已经带大家简单的了解了下过滤器,本次我们开始介绍授权过滤器. 我们之前提到过授权过滤器在认证过滤器之后,其他过滤器和方法被调用之前运行,而授权过滤器和它名字的含 ...
- 笨鸟先飞之ASP.NET MVC系列之过滤器(03动作过滤器过滤器)
概念介绍 动作过滤器应该是我们平常工作中需要用到最多的过滤器了,动作过滤器,主要在我们的动作方法执行前后执行. 如果我们需要创建动作过滤器需要实现IActionFilter接口. 我们看到该接口里有两 ...
- 笨鸟先飞之ASP.NET MVC系列之过滤器(04认证过滤器过滤器)
概念介绍 认证过滤器是MVC5的新特性,它有一个相对复杂的生命周期,它在其他所有过滤器之前运行,我们可以在认证过滤器中创建一个我们定义的认证方法,也可以结合授权过滤器做一个复杂的认证方法,这个方法可以 ...
- 笨鸟先飞之ASP.NET MVC系列之过滤器(05结果过滤器)
概念介绍 结果过滤器看名字就知道这个过滤器是针对方法所产生结果的,结果过滤器,主要在我们的动作方法结果返回前后执行. 如果我们需要创建结果过滤器需要实现IResultFilter接口. namespa ...
- 笨鸟先飞之ASP.NET MVC系列之过滤器(06异常过滤器)
概念介绍 异常过滤器主要在我们方法中出现异常的时候触发,一般我们用 异常过滤器 记录日志,或者在产生异常时做友好的处理 如果我们需要创建异常过滤器需要实现IExceptionFilter接口. nam ...
- 笨鸟先飞之ASP.NET MVC系列之过滤器(04认证过滤器)
概念介绍 认证过滤器是MVC5的新特性,它有一个相对复杂的生命周期,它在其他所有过滤器之前运行,我们可以在认证过滤器中创建一个我们定义的认证方法,也可以结合授权过滤器做一个复杂的认证方法,这个方法可以 ...
- 【ASP.NET MVC系列】浅谈ASP.NET MVC 控制器
ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...
- 【ASP.NET MVC系列】浅谈Google Chrome浏览器(操作篇)(下)
ASP.NET MVC系列文章 [01]浅谈Google Chrome浏览器(理论篇) [02]浅谈Google Chrome浏览器(操作篇)(上) [03]浅谈Google Chrome浏览器(操作 ...
- 【ASP.NET MVC系列】浅谈NuGet在VS中的运用
一 概述 在我们讲解NuGet前,我们先来看看一个例子. 1.例子: 假设现在开发一套系统,其中前端框架我们选择Bootstrap,由于选择Bootstrap作为前端框架,因此,在项目中,我们 ...
随机推荐
- 广度优先搜索(BFS)——迷宫的最短路径
宽度优先搜索按照距开始状态由近到远的顺序进行搜索,因此可以很容易的用来求最短路径,最少操作之类问题的答案. 宽度优先搜索介绍(一篇不错的文章). 题目描述: 给定一个大小为N*M的迷宫.迷宫有通道和墙 ...
- 延迟实例化 Lazy<T>
之前写的设计模式 单例模式中,推荐了使用Lazy<T>来达到线程安全和减少系统资源消耗的作用. 作用及优点: 创建某一个对象需要很大的消耗,而这个对象在运行过程中又不一定用到,为了避免每次 ...
- python用ElemenTree快速高效的解析xml
python解析xml有很多种方法,比较流行的由SAX,DOM和ElementTree,简要介绍一下这几种方法的异同: 方法 特点 SAX SAX解析通过流模式在解析XML的过程中触发对应的事件(st ...
- android TranslateAnimation 顶部segment分段移动动画
这里实现的功能是从主页布局的fragment点击跳转到一个acitivity,然后顶部是一个切换的segment顶部是一个listview,点击segment分段让listview加载不同的内容.我这 ...
- 三、nginx实现反向代理负载均衡
1.反向代理 需求: 两个tomcat服务通过nginx反向代理 nginx服务器:192.168.101.3 tomcat1服务器:192.168.101.5 tomcat2服务器:192.168. ...
- 基于C语言的UTF-8中英文替换密码设计
简要说明 本设计为湖南大学密码学的一次课程作业设计.非作业目的可随意引用. 由于本人初次接触密码学,本设计可能存在问题以及漏洞.若发现望指出. GitHub : https://github.com/ ...
- Beta阶段事后诸葛亮分析
1.总结的提纲内容 a. 项目管理之事后诸葛亮会 设想和目标 1.我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 我们的软件主要解决用户无意识花钱,无法清楚看见钱去 ...
- spring 注入使用注解(不用xml)
(一):导入spring4的jar包 (二):在xml中配置扫描的包 <context:component-scan base-package="entity">< ...
- 201521123118《java与程序设计》第14周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. 2. 书面作业 1. MySQL数据库基本操作 建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现自 ...
- 猴子吃桃问题(南阳ACM324)
猴子吃桃问题 时间限制:3000 ms | 内存限制:65535 KB 难度:0 描述 有一堆桃子不知数目,猴子第一天吃掉一半,又多吃了一个,第二天照此方法,吃掉剩下桃子的一半又多一个,天天如此, ...