MVC4过滤器详解_第1页
MVC4过滤器详解_第2页
MVC4过滤器详解_第3页
MVC4过滤器详解_第4页
MVC4过滤器详解_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

过滤器 提供的四种基本类型过滤器接口 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 FilterScope Action 30 Controller 20 First 0 Global 10 Last 100 FilterProviders 为筛选器提供一个注册点 内部有一个 FilterCollection 类型的 Providers 属性 可对筛 选器集合进行添加 移除等操作 FilterProviders 用于注册 FilterProvider 的 静态构造器在加载的时候 会默认创建三种类 型的对象并将其作为表示 FilterProviderCollection 集合的 Providers 属性值 其构造函数如下 static FilterProvidersFilterProviders Providers new FilterProviderCollection Providers Add GlobalFilters Filters Providers Add new FilterAttributeFilterProvider Providers Add new ControllerInstanceFilterProvider 构造函数中添加了全局过滤器和其他两个 Provider 对象 GlobalFilters 的 Filters 属性的类 型为 GlobalFilterConllection Providers 是提供了一个注册点 首先注册全局过滤器 FilterAttribute 与 FilterAttributeFilterProvider FilterAttribute 是所有过滤器的基类 其继承于 Attribute 和 IMvcFilter 接口 ControllerDesciptor 和 ActionDescriptor 分别表示 Controller 和 Action 的 ControllerDescriptor 和 ActionDescriptor 实现了 ICustomAttributeProvider 接口 使其保证能使用 Action 和 Controller 上以及 FilterAttribute 上的所有特性 这两个类型也单独的实现了获得 FilterAttribute 的方法 Controlles 与 ControllerInstanceFilterProvider Controller 内部也继承了筛选器的四大特性 可以说 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 OutputCacheLocation Any Client Downstream Server None ServerAndClient 默认值是 Any 表示输出缓存可用于所有请求 包括客户端浏览器 代理服务器或处理请 求的服务器上 VaryByParam 定义了一个分号分隔的字符串列表 用于使输出缓存发生变化 默认情况 下 这些字符串与用 GET 方法属性发送的查询字符串值对应 或与用 POST 方法 发送的 参数对应 当将该属性设置为多参数时 对于每个指定的参数 输出缓存都包含一个请求 文档的不同版本 可能的值包括 none 和任何有效的 查询字符串或 POST 参数 名称 Shared 布尔值 用于指明输出缓存是否可以被多个页共享 默认值为 false CacheProfile 用于定义与该页关联的缓存设置的名称 类似于与配置文件缓存名称关联 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 用于验证服务器篡改 ValidateAntiForgeryToken public ActionResult Example return View CompressFilterAttributeCompressFilterAttribute 的使用的使用 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 方法 它产生一个随 机值然后分别存储到客户端 coo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论