ASP.NET MVC 过滤器详解
http://www.fwqtg.net/asp-net-mvc-%E8%BF%87%E6%BB%A4%E5%99%A8%E8%AF%A6%E8%A7%A3.html
我经历了过滤器的苦难,我想到了还有不会的芸芸众生!
所以,我来了,我将给你们来过滤器的辉煌!!!
废话不多说!Come On!Baby!
今天咱们来研究一下—-过滤器!
在研究之前,难免会有几个问题,譬如:
1:什么是咱们程序中的过滤器?
2:这个过滤器又有什么作用那?
3:它的具体又是怎么实现的那?
下面,咱们就带着这三个问题来学习一下,咱们所说的过滤器,到底是怎么一回事!!!
第一讲:别认为它很难掌握,理论功底要扎根!
过滤器:字面直译不难理解,无非就是把不需要的东西过滤掉,剩下有用的东西,就像咱们平时生活中用的漏勺一样。我想这个比喻应该很恰当了吧!
这只是咱们生活中对过滤器的理解!
但是,在咱们的MVC中,或者说咱们的程序当中,这个过滤器又是一个什么样的东东呢?
Filter(过滤器)是基于AOP(面向接口编程)的设计,它的作用是对MVC框架处理客户端请求注入额外的逻辑,以非常简单优美的方式实现横切关注点(Cross-cutting Concerns)。
横切关注点是指:横越应该程序的多个甚至所有模块的功能,经典的横切关注点有日志记录、缓存处理、异常处理和权限验证等。
过滤器的本质:就是一个实现了特定接口或者父类的特殊类。
那么问题来了?
它实现了,或者说继承了什么特定的接口或者父类那?
答案是:咱们自定义的过滤器必须满足的两个条件
1:必须继承FilterAttribute这个抽象类 这个类的命名空间是System.Web.Mvc;
2:必须实现了实现四个接口中的任何一个。
那么,这四个接口分别又是什么那?不要急,咱接着往下看:
MVC过滤器一共分为四个:ActionFilter(控制器过滤器),ResultFilter(结果过滤器),AuthorizationFilter(授权过滤器),ExceptionFilter(异常处理过滤器)。
这四个过滤器又继承那些接口?又有什么作用那?看完下面的图片,我想大家应该就会明白一些了!
需要注意:
IAuthorizationFilter:在所有的Filter中最早执行的,可用于Action的权限控制
IActionFilter:在Action执行的前后,可用于请求跳转、记录Action执行日志
OnActionExecuted:在Action执行之后执行!
OnActionExecuting:在Action执行之前执行! 下面的Demo中就是讲解的这两个方法
具体看下图有介绍:
IResultFilter:在Result执行的前后,可用于记录Result执行日志
IExceptionFilter:在任何异常发生时,可用于记录日志、处理异常、指定错误页面
第二讲:熟能生巧,无功自破!
学了上面的一些基本内容,为了加深下印象和更深入的理解,咱们来写一个Demo!
第一步:首先创建一个咱们需要的MVC项目,效果图和步骤说明如下图所示:
点击确定后,会弹出一个选项框,按照,下图指示完成即可:
这样咱们的一个MVC项目就创建完成了 !
第二步:创建控制器和相应的试图,右键点击Controllers→添加→控制器
如下图:
弹出框后,更改控制器名字,点击确定,即可完成创建控制器!
效果图:
控制器创建完成后的效果图如下:
右键点击Index(),然后选择添加试图,弹出框如下
记住:试图名要和Action的名称一致,点击添加后的界面如下:
第三步:查看没用过滤器之前的效果
以上步骤都完成以后,咱们可以先来看一下现在的效果了:
运行效果如下:
下面咱们就来看下:加上过滤器后的效果又会是什么样子的呢?
第四步:添加咱们用户自己定义的过滤器!
右键点击项目名称→添加→新建文件夹
把文件夹的名字改成Filter就OK了!接下来的步骤就很重要了,创建咱们第一个自定义的过滤器
右键点击Filter→添加→类
弹出的窗体如下:写上类的名称,点击添加即可:
类创建完成后的效果图如下:
第五步:完善咱们创建的过滤器
咱们继续往下进行了,写什么?看注释,俺写的非常的详细!
继续写代码
这样下来,咱们的这个过滤器算是写完了,关键的一步又来了!
我在控制器中怎么实现呢?别急,容在下慢慢道来!
首先返回咱们的HomeController页面;
写什么?就写咱们刚才定义好的这个DemoFilter过滤器名称就行了
效果图如下:
第六步:运行,看效果:
蓝色框:代表OnActionExecting()方法里面的输出;
红色框:代表Action里面的输出;
绿色框:代表OnActionExected()方法里面的输出。
有的人就会说了,你写了这么多,就说了两个简单的方法,实际开发中没有多大的意义啊!!
那么咱们就来点有意义的,用咱写的过滤器记录一下错误日志,并保存在项目的根目录下!
第三讲:没有意义的意义
由于上面的步骤我说的已经很详细了,要是还看不懂,留言喷我!!!
那咱们就接着上面的步骤,稍微添加一下代码就行了!
就不过多解释了。谢谢!!!
第一步:在原有的Filter文件夹下新建一个ExceptionFilter类
第二步:书写咱们的ExceptionFilter过滤器
继续编写代码:
上文中的地址~/代表:项目的根目录,也就是这个错误日志存放的位置!
第三步:在HomeConttroller页面调用咱们写好的ExceptionFilter过滤器
第四步:运行看结果:
1:首先是程序中报错:
2:浏览器报错:
咱们的目的是记录错误日志,所以咱们就得去项目的根目录去寻找!
第五步:找到错误日志,打开看内容
右键点击项目名称→在文件资源管理器中打开文件夹
打开后效果图如下:
双击打开errorlog.txt文件后的效果如下:
就写了这一个贯穿的案列,希望对您有帮助!谢谢!
日积月累,滴水穿石!
我遇到的问题:
报错了!效果图如下:
原因分析:
throw new NotImplementedException() 这句话没有删除!
这句话是Visual Studio默认生成的,是为了提醒程序员要实现这个接口中的方法。
解决方法:
删除 throw new NotImplementedException()这句话即可!
ASP.NET MVC 过滤器详解的更多相关文章
- MVC过滤器详解
MVC过滤器详解 APS.NET MVC中(以下简称"MVC")的每一个请求,都会分配给相应的控制器和对应的行为方法去处理,而在这些处理的前前后后如果想再加一些额外的逻辑处理. ...
- Asp.Net Mvc 控制器详解
理解控制器 控制器的角色 (1)中转作用:控制器通过前面的学习大家应该知道它是一个承上启下的作用,根据用户输入,执行响应行为(动 作方法),同时在行为中调用模型的业务逻辑,返回给用户结果(视图). ( ...
- ASP.NET MVC Route详解
在MVC3.0版本的时候,微软终于引入了第二种模板引擎:Razor.在这之前,我们一直在使用WebForm时代沿留下来的ASPX引擎或者第三方的NVelocity模板引擎.Razor在减少代码冗余.增 ...
- asp.net MVC ViewData详解
转自:http://www.cnblogs.com/gaopin/archive/2012/11/13/2767515.html 控制器向视图中传值ViewData详解 1.将一个字符串传值到视图中 ...
- MVC过滤器详解和示例
原文 http://blog.csdn.net/ankeyuan/article/details/29624005 MVC过滤器一共分为四个:ActionFilter(方法过滤器),ResultFi ...
- asp.net Mvc 路由详解,非常详细.
关于路由的理解 为什么要定义路由?路由的定义在开发中的工作量非常小,但是非常重要,因为任何请求都离不开路由. 各个电商网站的 URL 使用非常灵活,都离不开路由的定义,请大家参考几家电商的 URL 如 ...
- MVC过滤器详解 面向切面编程(AOP)
面向切面编程:Aspect Oriented Programming(AOP),面向切面编程,是一个比较热门的话题.AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个 ...
- asp.net MVC 过滤器使用案例:统一处理异常顺道精简代码
重构的乐趣在于精简代码,模块化设计,解耦功能……而对异常处理的重构则刚好满足上述三个方面,下面是我的一点小心得. 一.相关的学习 在文章<精简自己20%的代码>中,讨论了异常的统一处理,并 ...
- Asp.Net MVC学习总结之过滤器详解(转载)
来源:http://www.php.cn/csharp-article-359736.html 一.过滤器简介 1.1.理解什么是过滤器 1.过滤器(Filters)就是向请求处理管道中注入额外的 ...
随机推荐
- 构建Docker+Jenkins持续集成环境
docker和Jenkins不是什么新东西了,两者结合也不是什么稀奇的事情,也已经有很多Jenkins和docker相结合的文章,此文仅为自己的一点心得实践,如有不对的地方,欢迎大家纠正. 先贴上大致 ...
- Delphi的基于接口(IInterface)的多播监听器模式(观察者模式 )
本文来自:http://www.cnblogs.com/hezihang/p/6083555.html Delphi采用接口方式设计模块,可以降低模块之间的耦合,便于扩展和维护.本文提供一个实现基于接 ...
- ruby 元编程
一 对象模型 kernel Module Kernel.private_instance_methods.grep(/^pr/) private method 1 如果一个方法接收者不是你自己,一 ...
- pandas 练习
from pandas import Series, DataFrame # Series接收list或dict作为一维数据 #两个属性:values, index #① s1 = Series([4 ...
- 20135231 —— Linux 基础入门学习
20135231 何佳 学习计时:共12小时 读书:5 代码:2 作业:2 博客:3 一.学习目标 1. 能够独立安装Linux操作系统 2. 能够熟练使用Linux系统的基本命令 3. 熟练使用Li ...
- iOS:界面适配(三)--iPhone不同机型或设备不同尺寸适配(屏幕适配)和系统适配
对于不同苹果设备,各个参数查看<iOS:机型参数.sdk.xcode各版本>. 机型变化 坐标:表示屏幕物理尺寸大小,坐标变大了,表示机器屏幕尺寸变大了: 像素:表示屏幕图片 ...
- 微信小程序全选,微信小程序checkbox,微信小程序购物车
微信小程序,这里实现微信小程序checkbox,有需要此功能的朋友可以参考下. 摘要: 加减商品数量,汇总价格,全选与全不选 设计思路: 一.从网络上传入以下Json数据格式的数组 1.标题titl ...
- memcached 适用的场景
最近在看 memcached 的公共课,发现memcache的确是个好东西,可以显著地减小数据库负载,当然我们要搞清楚,任何一样技术都有它的优缺点, 在使用它的时候,搞清楚它的适用场景,才能扬长避短 ...
- TCP的三次握手和四次挥手
置顶文章:<纯CSS打造银色MacBook Air(完整版)> 上一篇:<两个简单的Loading> 作者主页:myvin 博主QQ:851399101(点击QQ和博主发起临时 ...
- 微软发布独立Android模拟器 为开发者提供测试
微软发布了 Visual Studio 2015 正式版,除了免费的社交版之外,另外也有付费的专业版.这套工具除了提供 Windows 应用程序的整合环境之外,你也可以利用它来开发 Android 程 ...