资源预览内容
第1页 / 共12页
第2页 / 共12页
第3页 / 共12页
第4页 / 共12页
第5页 / 共12页
第6页 / 共12页
第7页 / 共12页
第8页 / 共12页
第9页 / 共12页
第10页 / 共12页
亲,该文档总共12页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
过滤器提供的四种基本类型过滤器接口,IAuthorizationFilter、IActionFilter、IResultFilter 和IExceptionFilter,可通过继承对应的接口和 FilterAttrbute 特性,定义自己的过滤器,也可继承内置的过滤器,重写相应的方法,完成自己的需求。授权:IAuthorizeFilter 授权过滤器接口,对身份进行验证活动:IActionFilter 行为过滤器接口, 执行 Action 方法前后执行逻辑结果:IResultFilter 结果过滤器接口,提供了在返回结果前后执行方法异常:IExceptionFilter 异常过滤器接口,可对其设定在出现异常后的处理方式和方法。一授权过滤器:AuthorizeAttribute:授权过滤器特性,继承 FilterAttribute, IAuthorizationFilter若是要自定义授权特性,可以继承于 AuthorizeAttribute,然后重写 AuthorizeCore(自定义授权)和 HandleUnauthorizedRequest(授权失败执行逻辑 )的方法。也可以直接继承于FilterAttribute 和 IAuthorizationFilter,重写 OnAuthorization 方法。二:方法/行为结果过滤器:自定义方法行为过滤器,只需要继承于 ActionFilterAttribute 即可,也可根据自己所需,是否继承 IActionFilter 和 IResultFilter,再继承于 FilterAttribute,自定义过滤器。ActionFilterAttribute 继承了 IActionFilter,IResultFilter 接口,实现了接口方法。OnActionExecuting:执行 Action 前执行OnActionExecuted:执行 Action 后执行OnResultExecuting:返回结果前执行方法OnResultExecuted:返回结果后执行方法三:异常过滤器自定义异常过滤器,只需要继承于内置 HandleErrorAttribute 接口即可。也可自定义异常过滤器,继承于 FilterAttribute 和 IExceptionFilter.OnException 方法:在抛出异常时执行的方法。启用这个异常功能:使用异常过滤器,需要两个步骤:Web.Config 文件配置开启自定义错误配置使用 handleError 特性注释动作或控制器类HandleError (Order = 1 ,ExceptionType = typeof(sqlException),View = 错误处理的视图)Pubic ActionResult About()Filter执行顺序根据 Order, Scope 属性来过滤器的执行顺序,如果 Order 相同,则根据 Scope 来最终决定执行顺序。执行优先级:Global 过滤器 Controller 过滤器Action 过滤器public enum FilterScopeAction = 30,Controller = 20,First = 0,Global = 10,Last = 100FilterProviders: 为筛选器提供一个注册点,内部有一个 FilterCollection 类型的 Providers 属性,可对筛选器集合进行添加,移除等操作。FilterProviders 用于注册 FilterProvider 的,静态构造器在加载的时候,会默认创建三种类型的对象并将其作为表示 FilterProviderCollection 集合的 Providers 属性值,其构造函数如下:static FilterProviders()Providers = new FilterProviderCollection();Providers.Add(GlobalFilters.Filters);Providers.Add(new FilterAttributeFilterProvider();Providers.Add(new ControllerInstanceFilterProvider();构造函数中添加了全局过滤器和其他两个 Provider 对象. GlobalFilters 的 Filters 属性的类型为 GlobalFilterConllection。Providers 是提供了一个注册点,首先注册全局过滤器FilterAttribute 与 FilterAttributeFilterProviderFilterAttribute 是所有过滤器的基类,其继承于 Attribute 和 IMvcFilter 接口.ControllerDesciptor和 ActionDescriptor分别表示 Controller 和 Action 的 ControllerDescriptor 和 ActionDescriptor 实现了ICustomAttributeProvider 接口,使其保证能使用 Action 和 Controller 上以及FilterAttribute 上的所有特性。这两个类型也单独的实现了获得 FilterAttribute 的方法。Controlles与 ControllerInstanceFilterProviderController 内部也继承了筛选器的四大特性,可以说 Controller 本身就是一个过滤器。ControllerInstanceFilterProvider 是针对 Controller 的特殊的 Filter,它的内部的GetFilter 方法是通过指定的 ControllerContext 获得对应的 Controller 对象,并创建一个对应的 Filter,Controller 对象作为 Filter 对象的 Instance 属性值,这个 Scope 值为First,所以为第一个执行。GlobalFilterCollection(全局过滤器集合)FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); /默认注册一个 HanderError 过滤器注册全局过滤器:GlobalFiters.Filters.add(new HanderError();疑问:1、Controller 上的过滤器与 Action 中的过滤器什么区别?Controller 上的过滤器比 Action 先执行,这是根据内部的 FilterScope 指定的。Controller 上的过滤器应用于整个控制器,而 Action 的过滤器只应用于当前标识的action 方法中。2.Controller 上的过滤器是否会继承父 Controller 上的过滤器会的,只要在父 Controller 上标识了过滤器,其子 Controller 也会执行这个过滤器。见演示。MVC内置的过滤器:一、OutputCache 它有一个默认的构造器,并有很多属性,这里选择几个说明一下:Duration 缓存的时间周期,以秒计Location 用于指定输出缓存项的位置这个属性是一个枚举值:public enum OutputCacheLocationAny,Client,Downstream,Server,None,ServerAndClient默认值是 Any,表示输出缓存可用于所有请求,包括客户端浏览器、代理服务器或处理请求的服务器上。VaryByParam 定义了一个分号分隔的字符串列表,用于使输出缓存发生变化。默认情况下,这些字符串与用 GET 方法属性发送的查询字符串值对应,或与用 POST 方法 发送的参数对应。当将该属性设置为多参数时,对于每个指定的参数,输出缓存都包含一个请求文档的不同版本。可能的值包括“none”、“*”和任何有效的 查询字符串或 POST 参数名称。Shared 布尔值,用于指明输出缓存是否可以被多个页共享。默认值为 falseCacheProfile 用于定义与该页关联的缓存设置的名称,类似于与配置文件缓存名称关联。NoStore 个布尔值,用于决定是否阻止敏感信息的二级存储。例如:对时间进行缓存,在视图中:DateTime.Now.ToString()为 Action 添加缓存OutputCache(Duration = 60, VaryByParam = *)public ActionResult Example()return View(); 二、ValidateInput 该 Action 可以接受 Html 等危险代码ValidateInput(false)public ActionResult Example()return View(); 三、ValidateAntiForgeryTokenAttribute 用于验证服务器篡改。ValidateAntiForgeryTokenpublic ActionResult Example() return View(); CompressFilterAttribute的使用:1.创建:2.使用:3.应用效果:首先我们看看没有进行 GZIP压缩的时候,首页的文件大小是多少?再来看看执行了 GZIP压缩后,文件的大小是多少?压缩率为 71%。ValidateAntiForgeryTokenAttribute 的使用:用于验证服务器篡改。模拟表单提交,加上后,可防止跨站攻击。使用:1.在请求表单中添加:Html.AntiForgeryToken() ;页面上的 Html.AntiForgeryToken()会给访问者一个默认为“RequestVerificationToken”的 cookie 和 hide filed。2. 在目标 action 上增加ValidateAntiForgeryToken特性,它是一个验证过滤器它主要检查(1)请求的是否包含一个约定的 AntiForgery 名的 cookie(2)请求是否有一个 Request.Form约定的 AntiForgery 名,约定的 AntiForgery名的 cookie 和 Request.Form 值是否匹配生成:Html.AntiForgeryToken()调用了 AntiForgery 静态类的 GetHtml 方法,它产生一个随机值然后分别存储到客户端 cookie 和页面的 hidden field 中。其中 cookie 的 key 的名字和页面 hidden field 的名字是一样的,默认都是 _RequestVerificationToken。如果页面中不存在 id 为” _RequestVerificationToken”的 hidden field,或者 Cookie 中的 key和页面中的 hidden field 值不相等,则直接抛出 HttpAntiForgeryException 异常参考网址:http:/www.cnblogs.com/dragon_mail/archive/2011/07/10/2102364.htmlhttp:/www.cnblogs.com/ASPNET2008/archive/2010/03/09/1681990.htmlhttp:/msdn.microsoft.com/zh-cn/library/gg416513(v=vs.98).aspx
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号