zoukankan      html  css  js  c++  java
  • 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()这句话即可!

  • 相关阅读:
    微信小程序HTTPS
    微信商城-1简介
    va_list
    Event log c++ sample.
    EVENT LOGGING
    Analyze Program Runtime Stack
    unknow table alarmtemp error when drop database (mysql)
    This application has request the Runtime to terminate it in an unusual way.
    How to check if Visual Studio 2005 SP1 is installed
    SetUnhandledExceptionFilter
  • 原文地址:https://www.cnblogs.com/zkwarrior/p/5153322.html
Copyright © 2011-2022 走看看