标签:
----------------------------------------------
注: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:指定一个内容页面,在其他情况下都无法显示异常消息时,便使用该页面。
标签:
原文地址:http://www.cnblogs.com/wjs5943283/p/4644083.html