zoukankan      html  css  js  c++  java
  • [MSDN]ASP.NET MVC2(9)使用Filter特性

    说明:本内容来自微软的webcast,讲师为苏鹏。视频没有书方便(想看哪页就看哪页),所以抄录要点和老师语录。

    内容介绍

    -          基于Filter的使用

    -          自定义开发Filter

    预备知识

    -          安装VS2010

    -          了解ASP.NET

    -          了解设计模式基本概念

    Filter的作用

    -          Action 的附加说明

    Filter的真正作用——对Action如何使用作详细的说明。

    不一定所有的Filter类都是限制用户执行或允许用户执行.

    ASP.NET MVC 中的Filer

    -          Authorize

    -          HandleError

    -          OutputCache

    -          RequireHttps

    授权

    异常处理

    限制输出的内容,缓存内容

    http传输内容加密,SSL加密层的协议。

    Authorize

    -          AuthorizeAttribute标签

    该标签从MVC1就有,用来限制用户是否有权限访问Action

    clip_image002

    可以限制某个操作只能被某个用户使用,例如DeleteAllUsers()只有Phil可使用。

    clip_image004

    登录页面也可以在webconfig中配置。

    Requirehttps

    它要求您的请求必须是https

    它既可以放在controller又可以放在Action上。

    放在controller上所有的Action都必须符合https

    如果不是https,但是是Get请求,则会转为https请求。而且web服务器要支持https

    Post请求,没办法自动转为https,则会抛出异常。

    OutputCache

    clip_image006

    asp.net2005很类似

    OutputCache写法——写在Action

    需要缓存的是数据

    SqlDependency——根据Sql数据库某一表的值进行缓存的,当值改变的时候缓存的值释放,当值没有变的时候,保持缓存。

    VaryByContentEncoding——3.5新特性,它是用一个逗号分割字符串,说明内容编码的格式。

    VaryByCustom——是否缓存取决于GetVaryByCustom()函数,函数在global.asax.cs里,重载GetVaryByCustom()函数,就可以自己订制。

    VaryByHeader——做缓存释放,根据http header释放缓存。

    VaryByParam——以参数的方式释放缓存。参数值的变化会导致缓存。

    OutputCache config里的配置

    很多Outputcache 设置一样,使用配置文件达到复用的目的。

    clip_image008

    Exception Filter

    clip_image010

    它去指定一个Action去处理异常,并且指定一个view来显示指定的异常。

    没有指定显示错误View的话,默认显示错误的ViewError,它在Share文件夹下。

    异常的定义,从小到大写。Order越小越先执行。

    Custom Filters

    -          IAuthorizationFilter

    -          IActionFilter

    -          IResultFilter

    -          IExceptionFilter

    ActionFilterAttribute

    Ø         自定义filter——继承FilterAttribute这个基础类,并且实现上面四个其中一个接口。

    Ø         IActionFilter——在Action执行前和执行中做操作。

    Ø         IResultFilter——执行后和返回前做操作的

    Ø         如果在Action执行的过程中,加入自己的逻辑,可以实现IActionFilterIResultFilter

    Ø         IAuthorizationFilterIExceptionFilter——授权和异常,通常是给Framework用的,自己没必要实现和修改它,但是也是可以修改的。

    ActionFilterAttribute

    clip_image012

    ActionFilterAttribute它有四个虚函数。它对应Action四个执行过程。

    ActionExecuted——Action还没被执行之前

    ActionExecuting——Action正在执行

    ResultExecuted——正在生成执行结果

    ResultExecuting——执行结果生成往用户端发送结果之前,这一时间段。

    四个有不同的事件,请求上下文作为参数可以使用。

    ActionExcetingContext

    ActionParameters

    Result

    Ø         Action正在执行的时候

    Ø         ActionParameters——它是字典类,存储传递给Action的参数。

    Ø         Result——当前请求被取消的时候,Filter会自己生成一个ActionResult 来代替从Action传出来的结果,把它传给用户。

    Ø         用户请求有问题,不想让用户执行这个Action,这时候有一个Cancel的属性就被设为true,不是ExcetingContext的属性,而是ExcetedContext的属性。

    ActionExecutedContext

    -          Canceled

    -          Exception

    -          ExceptionHandled

    -          Result

    Ø         重要,头一个属性最重要。

    Ø         Canceled——布尔。如果设为true的话,那么就认为这个请求被取消了。这个Action就不执行了,然后就直接构造一个ResultActionContextResult,返回ActionContextResult。用户看到不是预期的,是因为请求被取消了。

    Exception——Filter抛出异常时,他会记住这个异常。

    ExceptionHandled——布尔。

    Ø         例如:如果true的话,两个ActionFilterABAB之前执行了,如果Action 结果返回一个ViewResultA执行完了,没问题。该B执行了,执行OnActionExecuted的时候,抛出异常了。AOnActionExcuted()方法永远没有办法看到Action返回的ViewResult

    Ø         解释:用这种方法撤销已经返回的ActionResult,无论你在第几个执行,只要OnActionExceting结果的ActionExecutedContext里的ExceptionHandled=true,即抛出异常。则所有的监视这个ActionFilter谁都拿不到ActionResulte,即Result 永远丢失了。

    Result——Action的返回结果。主要用来修改结果返回的视图或者生成一个假的。

    ResultExecutingContext

    -          Cancel

    -          Result

    Cancle——是否返回生成结果。

    ResultExecutedContext

    -          Canceled

    -          Exception

    -          ExceptionHandled

    -          Result

    它和ActionExecutedContext类似。

    编写ActionFilter

    自定义Filter时以Attribute后缀,意义是说明它是一个标签。

    使用时,用Filter名字,即去掉Attribute后缀。

    clip_image014

    clip_image016

    Filter执行顺序

    -          1.Order 小的先执行

    -          2.具有同样Order的,看定义范围

    -          3.Order的最后执行

    -          4.代码内部定义的优先执行

    -          5.同类型的filter无法确定执行顺序

    Ø         Order——约束Filter执行顺序

    Ø         范围——一个定义在Action,一个定义在Controller,则Controller上的Filter会先执行

    Ø         加入OnActionExcuted这类接口,有最大优先级,会比所有的Filter都先执行。在Action里面,自己写了OnActionExcuting()方法,那么它就会先执行。

    Ø         同类型的filte,好几个都是HandleErrorResult,没有写Orders,放在一起,执行顺序不确定。所以强调要写Order

    总结

    -          基本Filter的使用。

    -          自定义开发Filter

    附:

    标题:粗体+斜体+黑色

    ppt文字:宋体+黑色

    作者语录:斜体+黑色/红色/蓝色

    我的心得:@开头

  • 相关阅读:
    第七周-学习进度条
    《梦断代码》阅读笔记01
    第六周-学习进度条
    构建之法阅读笔记03
    结对项目开发(石家庄地铁乘车系统)
    第五周-学习进度条
    第四周-学习进度条
    HDU--1272 小希的迷宫(并查集判环与联通)
    HDU--1856 More is better(简单带权并查集)
    HDU--3635 带权并查集
  • 原文地址:https://www.cnblogs.com/htht66/p/2330826.html
Copyright © 2011-2022 走看看