zoukankan      html  css  js  c++  java
  • mvc 筛选器

    之前公司中,运用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

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

  • 相关阅读:
    cocos2d-x编译到android平台后,增加返回键和菜单键支持
    Android 网络权限配置
    Unable to execute dex: java.nio.BufferOverflowException. Check the Eclipse log for stack trace.
    Andorid第三方库
    JS计算字符串长度(中文算2个)
    JSP table中除了第一行(标题)其他全清空
    [转]整理jquery开发技巧
    [转]整理jquery使用好习惯
    把对象转换成map
    Java ZIP打包
  • 原文地址:https://www.cnblogs.com/superCow/p/3785571.html
Copyright © 2011-2022 走看看