第16章 过滤器

----------------------------------------------

:ActionFilterAttribute类既实现了IActionFilter,也实现IResultFilter接口。是一个抽象类,要求你必须提供一个实现(派生类)。

  而 AuthorizeAttibute和HandleErrorAttribute,则包含了一些有用的特性,并且可以不必创建派生类进行使用。

:如果为控制器定义了一个自定义基类,那么运用于基类上的任何过滤器都会影响其派生类。

----------------------------------------------

一、使用过滤器

  1.过滤器:把附加逻辑注入到MVC框架的请求处理。是.NET的注解属性(Attribute),对请求处理管道添加了额外的步骤。

  2.注解属性:派生于System.Attribute的特殊的.NET类。可以附加到其他代码元素(类、方法、属性、字段等)上。

  目的是把附加信息嵌入到已编译的代码中,以便在运行时读回信息。

  在C#中注解属性以Atttibute结尾,用方括号[]进行附加,可以用已命名参数语法给它们的属性(public)赋值,

  在使用注解属性时,尾部的Attibute是省略的:AuthorizeAttibute->[Authorize]

  3.交叉关注:可以用于整个应用程序,而又不适合旋转在某个局部位置的功能,否则会打破关注分离模式(登录、授权、缓存等)。

MVC框架的过滤器类型

过滤器类型 接口 默认实现 描述
Authorization(认证) IAuthorizationFilter AuthorizeAttibute 最先运行,在任何其它过滤器或动作方法之前
Action(动作) IActionFilter ActionFilterAttribute 在动作方法之前及之后运行
Result(结果) IResultFilter ActionFiterAttribute 在动作结果被执行之前和之后运行
Exception(异常) IExceptionFiter HandleErrorAttribute 仅在另一个过滤器、动作方法、或动作结果抛出异常时运行

  4.内建授权过滤器:(AuthorizeAttribute)

    (1)属性 Users:string 一个逗号分隔的用户名列表,允许这些用户访问该动作方法

     (2)属性 Roles:string 一个逗号分隔的角色列表。为了访问该动作方法,用户必须至少是这些角色之一

  5.异常过滤器:(HandleErrorAttribute)

    (1)异常过滤器的主要应用:1.对异常进行日志,2.将适当的消息显示给用户。

    ExceptionContext属性

名称 类型 描述
Controller ControllerBase 返回请求的控制器对象
HttpContext HttpContextBase 提供对请求细节的访问,以及对响应的访问
IsChildAction bool 子动作判断
RequestContext RequestContext 提供HttpContext和路由数据的访问
RouteData RouteData 返回请求的路由数据

  ExceptionContext额外的属性

名称 类型 描述
ActionDescriptor ActionDescriptor 提供动作方法的细节
Result ActionResult 用于动作方法的结果
Exception Exception 未处理异常
ExceptionHandled bool 如果别的过滤器已经把这个异常标记为“已处理”,则返回true

  

  HandleErrorAttribute属性

名称 类型 描述
ExceptionType Type 由过滤器处理的异常类型。它也处理通过给定值继承而来的异常类型,但会忽略所有其他类型。默认为System.Exception,默认处理所有标准异常
View string 该过滤器渲染的视图名。默认是Error。默认渲染/View/<cuttentControllerName>/Error.html或/View/Shared/Error.htm
Master string 在渲染这个过滤器的视图时所使用的布局名称。默认布局页面

    (2)使用内建异常过滤器要在Web.config中〈system.web〉节点中〈pages〉节点之后增加

             /pages〉〈customErrors mode="on" defaultRedirect="/Content/RangeErrorPage.html" /〉〈/system.web〉

      mode:默认是RemoteOnly,指在开发期间,HandleErrorAttribute将不会拦截异常,只是部署之后,并从另一台电脑发出请求时,才生效。

       deaultRedirect:指定一个内容页面,在其他情况下都无法显示异常消息时,便使用该页面。

时间: 2024-12-19 02:20:28

第16章 过滤器的相关文章

【Android】16.0 第16章 自定义服务和系统服务&mdash;本章示例主界面

分类:C#.Android.VS2015: 创建日期:2016-03-01 一.简介 本章主要演示Started Service.带Intent过滤器的Started Service.IntentService的基本用法,并简单介绍Android提供的系统服务. 二.本章示例主界面 1.运行截图 2.MainActivity.cs文件中对应的代码 chItems.Add(new Chapter() { ChapterName = "第16章 自定义服务和系统服务", ChapterIt

4.4日第9次作业,,16章变更,17章安全,高项,29-田哲琦.

4.4日第9次作业,,16章变更,17章安全,高项,29-田哲琦.16章.变更管理 1.变更管理的原则是首先?P419答:变更管理的原则是首先建立项目基准.变更流程和变更控制委员会. 2.国内较多的配置工具有哪些?(3个)P419答:有Rational C1earCase,  VisualSvurceSafe和ConcurrentVersions Systemp. 3.CCB是决策机构还是作业机构?P420答:CCB是决策机构 4.项目经理在变更中的作用是什么?P420  答:项目经理在变更中的

《Cracking the Coding Interview》——第16章:线程与锁——题目5

2014-04-27 20:16 题目:假设一个类Foo有三个公有的成员方法first().second().third().请用锁的方法来控制调用行为,使得他们的执行循序总是遵从first.second.third的顺序. 解法:你应该想到了用lock的方法类阻塞,不过这里面有个概念问题使得直接用ReentrantLock不能通过编译(对于一个锁对象,不同在A线程中锁定,又在B线程中解锁,不允许这样的归属关系),可以用Semaphore来达到相同的目的.请看下面的代码. 代码: 1 // 16

《Cracking the Coding Interview》——第16章:线程与锁——题目3

2014-04-27 19:26 题目:哲学家吃饭问题,死锁问题经典模型(专门用来黑哲学家的?). 解法:死锁四条件:1. 资源互斥.2. 请求保持.3. 非抢占.4. 循环等待.所以,某砖家拿起一只筷子后如果发现没有另一只了,就必须把手里这只筷子放下,这应该是通过破坏"请求保持"原则来防止死锁产生,请求资源失败时,连自己的资源也进一步释放,然后在下一轮里继续请求,直到成功执行. 代码: 1 // This is the class for chopsticks. 2 import j

《Cracking the Coding Interview》——第16章:线程与锁——题目2

2014-04-27 19:14 题目:如何测量上下文切换的时间? 解法:首先,上下文切换是什么,一搜就知道.对于这么一个极短的时间,要测量的话,可以通过放大N倍的方法.比如:有A和B两件事,并且经常一起发生,每件只需要花几纳秒.如果你把A事件连续做几百万次,而B时间只做了几次,这样就能排除B事件对于测量的影响.如果总时间S = mA + nB.当m >> n 时,A≈S / m.下面的测量方法类似于打乒乓球,在主线程和副线程间互相传递一个令牌,这个令牌可以是变量.管道之类的用于通信的工具.与

《Cracking the Coding Interview》——第16章:线程与锁——题目1

2014-04-27 19:09 题目:线程和进程有什么区别? 解法:理论题,操作系统教材上应该有很详细的解释.我回忆了一下,写了如下几点. 代码: 1 // 16.1 What is the difference between process and thread? 2 Answer: 3 Process: 4 1. Basic element of resource allocation in the operating system. 5 2. Possesses independent

第16章 CSS盒模型下

第 16章 CSS盒模型[下]学习要点:1.元素可见性2.元素盒类型3.元素的浮动 本章主要探讨 HTML5中 CSS盒模型,学习怎样了解元素的外观配置以及文档的整体布局. 一.元素可见性使用visibility属性可以实现元素的可见性,这种样式一般可以配合 JavaScript来实现效果.样式表如下:属性 visibility 值 说明 CSS版本visible 默认值,元素在页面上可见 2hidden 元素不可见,但会占据空间. 2collapse 元素不可见,隐藏表格的行与列. 2 如果不

4.13日第12次作业,16章外包,17章需求,19章组织级与大型项目

29-高项-田哲琦 16章.外包管理 1.外包的形式有哪五种?什么是利益关系?P346-348 答:企业现行采用的主要外包形式如下: 1).活动外包 2).服务外包 3).内包 4).合包 5).利益关系. 利益关系(benfit-based relationship),这是一种长期合作关系,双方先为此关系进行投资,再根据预先拟定的协议分享利益,共同承担风险,同时共享利益. 2.外包管理的目标是什么?要实现这个目标,对外包管理提出哪四个方面的要求?P348 答:软件外包管理总的目标是用强有力的手

C++ Primer Plus 第六版 第16章 string类和标准模板库

1.string实际上是模板具体化basic_string<char> 的一个typedef,有默认参数,所以省略了初始化参数 2.size_type是一个依赖于实现的整形 string将string::npos定义为字符串的最大长度 3.string类的构造函数P656 4.对于c-风格字符串,3种输入方法:cin>>   cin.getline(),cin.get 对于string   ,2种输入方法:cin>>,getline(cin,string对象) 5.st