之前公司中,运用ActionFilterAttribute特性实现用户登录信息的验证,没事看了看,留下点东西备忘。

好的,瞅这玩意一眼就大概能猜到这货是干嘛的了吧,没错,action过滤器。其实就是AOP的思想,将我们的逻辑或业务进行了分片,使我们更加专注于业务的实现。不太清楚的娃子可以度娘下。(其实我也不是很了解,有空再把AOP深入了解下)

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false)]
public abstract class ActionFilterAttribute : FilterAttribute, IActionFilter, IResultFilter

首先从名称我们就知道,这是一个特性,这个特性可以用于类,用于方法,可被继承,能否加多个实例(AllowMultiple = false 获取或设置一个布尔值,该值指示能否为一个程序元素指定多个指示属性实例)。

他继承了FilterAttribute,IActionFilter,IResultFilter

那好,为了详细了解这个特性是干嘛呢,我们一个个看起

1,这尼玛一个个用语言描述定义太麻烦,借用园子中一童鞋的图(原文:http://www.cnblogs.com/darkdawn/archive/2008/07/20/1247022.html

这一眼就清晰多了,不过这个图也不够全面,不过也不是很重要(感兴趣的童鞋可以查一下大概的层次结构),FilterAttribute(表示操作和结果筛选器特性的基类。)其实还继承了IMvcFilter,接口。(定义用于指定筛选器顺序以及是否允许多个筛选器的成员。)

哦,大概了解了点,IMvcFilter定义了筛选器的基本功能,执行顺序,是否能多筛选,

FilterAttribute 是各类筛选器的基类

ActionFilterAttribute 这是实现action的筛选的抽象类

AuthorizeAttribute 这是实现用户身份验证的特性类

HandleErrorAttribute 这是处理异常的特性类

(public class AuthorizeAttribute : FilterAttribut, IAuthorizationFilter)

(public class HandleErrorAttribute : FilterAttribute,IExceptionFilter)

嗯,到现在,了解了一些了。

继续看ActionFilterAttribute ,还有两个接口IActionFilter,IResultFilter。

看名称大致就能猜到一个是action过滤器的接口,一个是结果过滤的接口

看了一下,其实就是定义了开始前后执行的两个方法

 

OnActionExecuted

在执行操作方法后由 MVC 框架调用。

 

OnActionExecuting

在执行操作方法之前由 MVC 框架调用。

 

OnResultExecuted

在执行操作结果后由 MVC 框架调用。

 

OnResultExecuting

在执行操作结果之前由 MVC 框架调用。

Ok,现在基本就清楚了,大致思路就是,比如商城中,订单页面需要用户登录,那么其实对应到我们的处理就是,在订单页面开始之前,验证用户是否登录,其实就是在页面的action执行之前进行验证。那我们就可以自己写一个UserLoginAttribute,继承ActionFilterAttribute,实现OnActionExecuting这个方法,在其中验证。然后我们需要用户登录的action加上所需标签即可(controller或者全局的都行)。

现在我们要重构代码,统一处理异常信息。查一下,哦,有这么个玩意HandleErrorAttribute ,大致东西跟其他过滤器是一样的,只不过这个类不是抽象类罢了

而且用的时候需要改下配置文件

(http://msdn.microsoft.com/zh-cn/library/system.web.mvc.handleerrorattribute(v=vs.118).aspx)

这里有篇异常处理的例子,很简单,童鞋么可以看一下(http://www.cnblogs.com/pengzhen/p/3774814.html)。

Mvc内置了四种筛选器(AuthorizationFilter、ActionFilter、ResultFilter和ExceptionFilter),它们对应着相应的筛选器接口(IAuthorizationFilter、IActionFilter、IResultFilter和IExceptionFilter)

这里关于筛选器的实现Filter,FilterProvider以及各筛选器的执行顺序,Artech有篇深入讲解的文章,(http://www.cnblogs.com/artech/archive/2012/07/02/filter.html

对着源码看一遍,还是很能提高对筛选器的实现的理解的。尼玛基本看的差不多了,试试吧。

mvc 筛选器的更多相关文章

  1. Asp.Net mvc筛选器中返回信息中断操作

    在mvc中,使用response.end()或Response.Redirect("url"); 是无法阻止请求继续往下执行的.如果在action中,可以我们可以使用return ...

  2. 基础教程:ASP.NET Core 2.0 MVC筛选器

    问题 如何在ASP.NET Core的MVC请求管道之前和之后运行代码. 解 在一个空的项目中,更新 Startup 类以添加MVC的服务和中间件. publicvoid ConfigureServi ...

  3. Mbp通过筛选器和中间件实现异常,日志,事务及接口返回数据格式化aop处理.

    Mbp应用服务层的AOP实现 实现方法:asp.net core mvc 筛选器 + 中间件 日志,事务,和接口返回结果统一格式化采用操作筛选器,而异常处理采用中间件来处理. 最开始,我是打算用aut ...

  4. Asp.Net MVC 页面代码压缩筛选器-自定义删除无效内容

    Asp.Net MVC 页面代码压缩筛选器 首先定义以下筛选器,用于代码压缩. /*页面压缩 筛选器*/ public class WhiteSpaceFilter : Stream { privat ...

  5. MVC四大筛选器—ExceptionFilter

    该筛选器是在系统出现异常时触发,可以对抛出的异常进行处理.所有的ExceptionFilter筛选器都是实现自IExceptionFilter接口 public interface IExceptio ...

  6. MVC四大筛选器—ActionFilter&ResultedFilter

    AuthorizeFilter筛选器 在Action的执行中包括两个重要的部分,一个是Action方法本身逻辑代码的执行,第二个就是Action方法的筛选器的执行. MVC4中筛选器都是以AOP(面向 ...

  7. 如何在ASP.NET MVC为Action定义筛选器

    在ASP.NET MVC中,经常会用到[Required]等特性,在MVC中,同样可以为Action自定义筛选器,来描述控制器所遵守的规则. 首先,我们在ASP.NET MVC项目中定义一个TestC ...

  8. MVC四大筛选器—AuthorizeFilter

    在Action的执行中包括两个重要的部分,一个是Action方法本身逻辑代码的执行,第二个就是Action方法的筛选器的执行. MVC4中筛选器都是以AOP(面向方面编程)的方式来设计的,通过对Act ...

  9. ASP.NET MVC 如何使用自定义过滤器(筛选器)

    继承*****Attribute(筛选器三种具体类)-->重写方法-->标记在控制器 或者 方法上面 或者 在FilterConfig中Add [类名(类属性 = 值)]还有[AllowA ...

随机推荐

  1. 使用Github Pages和Hexo构建博客

    Github Pages可以创建免费的静态站点,支持自带主题.支持自制页面等,并且可以使用Jekyll或者Hexo等静态博客框架进行管理. 独立博客是博客园等博客平台之外的一个良好补充,相比使用虚拟主 ...

  2. 基于Asp.Net Core Mvc和EntityFramework Core 的实战入门教程系列-3

    来个目录吧: 第一章 第二章 第三章 暂时就这么多.后面路线更新吧 创建.查询.更新.删除 这章主要讲解使用EF完成 增删改查的功能. 自定义"详情信息"页面 我们通过基架生成的代 ...

  3. 基于Struts自定义MVC-1

    自定义MVC        数据库:Oracle表:User(id,uname,upwd)自定义Struts框架一.定义Action接口 1 import javax.servlet.http.*; ...

  4. 微信小程序入门之构建一个简单TODOS应用

    最近开始了解微信小程序,虽然小程序已经出了很久了,刚出的那段时间很火,看到很多关于小程序的技术文章,不过现在似乎没那么火了,anyway,我们还是可以学习下的. 一.了解微信小程序 1.理念:小程序开 ...

  5. 计算机程序的思维逻辑 (73) - 并发容器 - 写时拷贝的List和Set

    本节以及接下来的几节,我们探讨Java并发包中的容器类.本节先介绍两个简单的类CopyOnWriteArrayList和CopyOnWriteArraySet,讨论它们的用法和实现原理.它们的用法比较 ...

  6. Spring+SpringMVC+MyBatis+easyUI整合基础篇(十)SVN搭建

    日常啰嗦 前面一篇文章讲了一下版本控制,但其实这一篇并没有打算讲细节的,感觉应该自己去动手弄一下,后来考虑了一下,版本控制真的挺重要的,如果自己实在搭建不好反而不去使用的话,真的有点可惜,当然这些话是 ...

  7. 循环单词 java

    链接:https://www.nowcoder.com/questionTerminal/9d5fbe7750a34d0b91c73943f93b2d7d来源:牛客网如果一个单词通过循环右移获得的单词 ...

  8. oslo_config中的DuplicateOptError坑

    前言: 最近在重写公司的Cinder Driver,我们driver是按照OpenStack的要求,依赖一个叫oslo_config的一个包.这个包的作用就是让driver申明所依赖的选项(可以来自文 ...

  9. Java 集合的理解(持续更新......)

    一.集合的由来 通常,我们的程序需要根据程序运行时才知道创建多少个对象.但若非程序运行,程序开发阶段,我们根本不知道到底需要多少个数量的对象,甚至不知道它的准确类型.为了满足这些常规的编程需要,我们要 ...

  10. 10分钟精通SharePoint-搜索

    大势所趋随着企业内容和文档数量的骤增,快速定位到所需材料和内容已经迫不及待,这也是所有企业所面临的共同的挑战,应这个大的趋势,"搜索"闪亮登上了企业协作(SharePoint)舞台 ...