• 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(异常处理过滤器)。

    这四个过滤器又继承那些接口?又有什么作用那?看完下面的图片,我想大家应该就会明白一些了!

    ASP.NET MVC  过滤器详解

    需要注意:

    IAuthorizationFilter:在所有的Filter中最早执行的,可用于Action的权限控制

    IActionFilter:在Action执行的前后,可用于请求跳转、记录Action执行日志

       OnActionExecuted:在Action执行之后执行!

       OnActionExecuting:在Action执行之前执行!  下面的Demo中就是讲解的这两个方法

    具体看下图有介绍:

    ASP.NET MVC  过滤器详解

    IResultFilter:在Result执行的前后,可用于记录Result执行日志

    IExceptionFilter:在任何异常发生时,可用于记录日志、处理异常、指定错误页面

                     第二讲:熟能生巧,无功自破!

    学了上面的一些基本内容,为了加深下印象和更深入的理解,咱们来写一个Demo!

    第一步:首先创建一个咱们需要的MVC项目,效果图和步骤说明如下图所示:

    ASP.NET MVC  过滤器详解

    点击确定后,会弹出一个选项框,按照,下图指示完成即可:

    ASP.NET MVC  过滤器详解

    这样咱们的一个MVC项目就创建完成了 !

    ASP.NET MVC  过滤器详解

    第二步:创建控制器和相应的试图,右键点击Controllers→添加→控制器

    如下图:

    ASP.NET MVC  过滤器详解

    弹出框后,更改控制器名字,点击确定,即可完成创建控制器!

    效果图:

    ASP.NET MVC  过滤器详解

    控制器创建完成后的效果图如下:

    ASP.NET MVC  过滤器详解

    右键点击Index(),然后选择添加试图,弹出框如下

    ASP.NET MVC  过滤器详解

    记住:试图名要和Action的名称一致,点击添加后的界面如下:

    ASP.NET MVC  过滤器详解

    第三步:查看没用过滤器之前的效果

    以上步骤都完成以后,咱们可以先来看一下现在的效果了:

    ASP.NET MVC  过滤器详解

    运行效果如下:

    ASP.NET MVC  过滤器详解

    下面咱们就来看下:加上过滤器后的效果又会是什么样子的呢?

    第四步:添加咱们用户自己定义的过滤器!

    右键点击项目名称→添加→新建文件夹

    ASP.NET MVC  过滤器详解

    ASP.NET MVC  过滤器详解

    把文件夹的名字改成Filter就OK了!接下来的步骤就很重要了,创建咱们第一个自定义的过滤器

    右键点击Filter→添加→类

    ASP.NET MVC  过滤器详解

    弹出的窗体如下:写上类的名称,点击添加即可:

    ASP.NET MVC  过滤器详解

    类创建完成后的效果图如下:

    ASP.NET MVC  过滤器详解

    第五步:完善咱们创建的过滤器

    咱们继续往下进行了,写什么?看注释,俺写的非常的详细!

    ASP.NET MVC  过滤器详解

    继续写代码

    ASP.NET MVC  过滤器详解

    这样下来,咱们的这个过滤器算是写完了,关键的一步又来了!

    我在控制器中怎么实现呢?别急,容在下慢慢道来!

    首先返回咱们的HomeController页面;

    写什么?就写咱们刚才定义好的这个DemoFilter过滤器名称就行了

    效果图如下:

    ASP.NET MVC  过滤器详解

    第六步:运行,看效果:

    ASP.NET MVC  过滤器详解

    蓝色框:代表OnActionExecting()方法里面的输出;

    红色框:代表Action里面的输出;

    绿色框:代表OnActionExected()方法里面的输出。

    有的人就会说了,你写了这么多,就说了两个简单的方法,实际开发中没有多大的意义啊!!

    那么咱们就来点有意义的,用咱写的过滤器记录一下错误日志,并保存在项目的根目录下!

                           第三讲:没有意义的意义

    由于上面的步骤我说的已经很详细了,要是还看不懂,留言喷我!!!

    那咱们就接着上面的步骤,稍微添加一下代码就行了!

    就不过多解释了。谢谢!!!

    第一步:在原有的Filter文件夹下新建一个ExceptionFilter类

    ASP.NET MVC  过滤器详解

    第二步:书写咱们的ExceptionFilter过滤器

    ASP.NET MVC  过滤器详解

    继续编写代码:

     ASP.NET MVC  过滤器详解

    上文中的地址~/代表:项目的根目录,也就是这个错误日志存放的位置!

    第三步:在HomeConttroller页面调用咱们写好的ExceptionFilter过滤器

    ASP.NET MVC  过滤器详解

    第四步:运行看结果:

    1:首先是程序中报错:

    ASP.NET MVC  过滤器详解

    2:浏览器报错:

    ASP.NET MVC  过滤器详解

    咱们的目的是记录错误日志,所以咱们就得去项目的根目录去寻找!

    第五步:找到错误日志,打开看内容

    右键点击项目名称→在文件资源管理器中打开文件夹

    ASP.NET MVC  过滤器详解

    打开后效果图如下:

    ASP.NET MVC  过滤器详解

    双击打开errorlog.txt文件后的效果如下:

    ASP.NET MVC  过滤器详解

         就写了这一个贯穿的案列,希望对您有帮助!谢谢!

                   日积月累,滴水穿石!

    我遇到的问题:

    报错了!效果图如下:

    ASP.NET MVC  过滤器详解

    ASP.NET MVC  过滤器详解

    原因分析:

    throw new NotImplementedException() 这句话没有删除!

    这句话是Visual Studio默认生成的,是为了提醒程序员要实现这个接口中的方法。

    解决方法:

    删除 throw new NotImplementedException()这句话即可!

  • 相关阅读:
    +7白盒测试与黑盒测试的定义与区别
    对于逆序数组,,选择排序 和 插入排序 那个更快?
    +1.1向量 链表 数组
    3.2 二十三种设计模式全解析
    3.1软件体系结构风格
    Mysql: 强制走索引:mysql between 日期索引 索引问题-日期索引使用
    php: xampp安装对应的phalcon版本(3.2.2-php5.6):比如redis-php5.6, php_igbinary-5.6
    京东自营,你TM太坑了。
    php:微信公众平台上传多媒体接口 41005错误
    php:如何使用PHP排序, key为字母+数字的数组(多维数组)
  • 原文地址:https://www.cnblogs.com/zkwarrior/p/5153322.html
Copyright © 2020-2023  润新知