zoukankan      html  css  js  c++  java
  • 理解ASP.NET MVC Framework Action Filters(翻的)

    原文地址:Understanding Action Filters

    本指南主要解释action filters,action filter作为一个可以应用到controller action(或者是整个controller)上的属性(Attribute),改变action执行的行为。ASP.NET MVC Framework包括几种action filters:

    • OutputCache – 在指定的时间内缓存controller action的输出。
    • HandleError – 处理controller action发生错误的情况。
    • Authorize – 通过制定的用户或者角色约束访问权限。

    你同时可以创建自己的action filter,比如说要实现一个自定义的验证系统,那么可能需要创建一个自定义的action filter,或者说当你需要改变controller action返回的view data的时候,也可以通过创建自定义action filter实现。

    通过这篇指南,您可以学习到如何创建一个action filter。我们将创建一个Log action filter,用于记录action中不同处理阶段的日志,并输出到Visual Studio的Output窗口。

    使用Action Filter

    一个action filter是一个属性(attribute),你可以把它应用在大多数的controller action中或者整个controller上。

    比如说,下图中的DataController有一个action为Index(),返回当前时间。而且这个action被OutputCache装饰了,这会造成返回值在10秒内缓存(不会有变化)。

    image

    如果一直刷新浏览器地址栏上的Url/Data/Index重复调用Index() action,你会发现在10秒内时间不会有变化,因为Index()的输出被缓存了10秒(如图)。

    image

    在上面的代码中,一个action filter:OutputCache应用在Index()方法上,如果有需要也可以应用多个action filter在同一个action上。比如说可以同时把OutputCache和HandleError作用在同一action上。

    在上面的代码中,也可以直接把OutputCache直接应用到DataController类上,那样的话这个controller中所有的action都会被缓存10秒。

    不同类型的Filter

    ASP.NET MVC Framework支持四种不同类型的filter:

    1. Authorization filters – 实现IAuthorizationFilter接口的属性.
    2. Action filters – 实现IActionFilter接口的属性.
    3. Result filters – 实现IResultFilter接口的属性.
    4. Exception filters – 实现IExceptionFilter接口的属性.

    filter的执行顺序按上面的列表中顺序进行。如验证(authorization)filter永远都是最开始执行的,异常(exception)filter永远都是最后执行的。

    验证(authorization)filter用于实现在controller action上的验证和授权,如Authorize filter就是一个验证filter的例子;

    Action filter包含一些逻辑,用于该action执行之前或者之后。比如可以使用一个action filter来修改action返回的view data;

    Result filter包含一些逻辑,用于该action的view result执行之前和之后。比如可以修改一个view result在view被呈现到浏览器之前;

    异常(Exception)action用于处理异常信息,同样可以使用异常filter记录错误日志。

    这些的filter类型是根据指定的顺序执行的,如果需要控制他们的执行顺序,需要设置filter的Order属性。

    这些类的基类为System.Web.Mvc.FilterAttribute类,如果需要实现一个特定的filter类型,可以创建一个继承这个类的类,并且实现一个或多个IAuthorization、IActionFilter、IResultFilter、ExceptionFilter接口。

    ActionFilterAttribute基类

    为了让用户更简单的创建一个自定义action filter,ASP.NET MVC Framework提供了一个基类ActionFilterAttribute,这个类实现了IActionFilter和IResultFilter接口,并且继承了Filter类。

    这里的术语并不完全一致,从技术上说,这个类继承ActionFitlerAttribute,并且同时实现了action filter和result filter接口,但是从宽松意义上说,在ASP.NET MVC Framework中,任何实现filter的类型都是action filter。

    ActionFilterAttribute类有以下的方法可以重写:

    • OnActionExecuting – 在controller action执行之前调用
    • OnActionExecuted – 在controller action执行之后调用
    • OnResultExecuting – 在controller action result执行之前调用
    • OnResultExecuted – 在controller action result执行之后调用

    下面会介绍如何实现这些方法。

    创建一个Log Action Filter

     

    为了阐述如何创建一个自定义的action filter,我们会创建一个自定义的action filter,用于记录controller action处理的不同阶段的日志信息,并显示到Visual Studio输出窗口中。

    image

    在上面代码中,OnActionExecuting()、OnActionExecuted()、OnResultExecuting()、OnResultExecuted()方法都调用Log()方法。把方法名称和当前route信息传递给Log()方法。Log()方法生成信息并输出到Visual Studio输出窗口中:

    image

    下图是修改后的HomeController中的代码,说明也可以把Log action filter应用到整个controller类上。每当有任何action被调用的时候,不管是Index()还是About()方法,各个处理阶段的日志都会记录到Visual Studio输出窗口中。

    总结

    在这篇指南中,介绍了ASP.NET MVC的action filter,了解了4种不同类型的filters,同时也了解了ActionFilterAttribute类,然后还学习了如何实现一个简单的action filter,我们创建了一个Log action filter,把action处理的各个阶段信息输出到Visual Studio的输出窗口中。

    原文地址:Understanding Action Filters

    本指南主要解释action filters,action filter作为一个可以应用到controller action(或者是整个controller)上的属性(Attribute),改变action执行的行为。ASP.NET MVC Framework包括几种action filters:

    • OutputCache – 在指定的时间内缓存controller action的输出。
    • HandleError – 处理controller action发生错误的情况。
    • Authorize – 通过制定的用户或者角色约束访问权限。

    你同时可以创建自己的action filter,比如说要实现一个自定义的验证系统,那么可能需要创建一个自定义的action filter,或者说当你需要改变controller action返回的view data的时候,也可以通过创建自定义action filter实现。

    通过这篇指南,您可以学习到如何创建一个action filter。我们将创建一个Log action filter,用于记录action中不同处理阶段的日志,并输出到Visual Studio的Output窗口。

    使用Action Filter

    一个action filter是一个属性(attribute),你可以把它应用在大多数的controller action中或者整个controller上。

    比如说,下图中的DataController有一个action为Index(),返回当前时间。而且这个action被OutputCache装饰了,这会造成返回值在10秒内缓存(不会有变化)。

    image

    如果一直刷新浏览器地址栏上的Url/Data/Index重复调用Index() action,你会发现在10秒内时间不会有变化,因为Index()的输出被缓存了10秒(如图)。

    image

    在上面的代码中,一个action filter:OutputCache应用在Index()方法上,如果有需要也可以应用多个action filter在同一个action上。比如说可以同时把OutputCache和HandleError作用在同一action上。

    在上面的代码中,也可以直接把OutputCache直接应用到DataController类上,那样的话这个controller中所有的action都会被缓存10秒。

    不同类型的Filter

    ASP.NET MVC Framework支持四种不同类型的filter:

    1. Authorization filters – 实现IAuthorizationFilter接口的属性.
    2. Action filters – 实现IActionFilter接口的属性.
    3. Result filters – 实现IResultFilter接口的属性.
    4. Exception filters – 实现IExceptionFilter接口的属性.

    filter的执行顺序按上面的列表中顺序进行。如验证(authorization)filter永远都是最开始执行的,异常(exception)filter永远都是最后执行的。

    验证(authorization)filter用于实现在controller action上的验证和授权,如Authorize filter就是一个验证filter的例子;

    Action filter包含一些逻辑,用于该action执行之前或者之后。比如可以使用一个action filter来修改action返回的view data;

    Result filter包含一些逻辑,用于该action的view result执行之前和之后。比如可以修改一个view result在view被呈现到浏览器之前;

    异常(Exception)action用于处理异常信息,同样可以使用异常filter记录错误日志。

    这些的filter类型是根据指定的顺序执行的,如果需要控制他们的执行顺序,需要设置filter的Order属性。

    这些类的基类为System.Web.Mvc.FilterAttribute类,如果需要实现一个特定的filter类型,可以创建一个继承这个类的类,并且实现一个或多个IAuthorization、IActionFilter、IResultFilter、ExceptionFilter接口。

    ActionFilterAttribute基类

    为了让用户更简单的创建一个自定义action filter,ASP.NET MVC Framework提供了一个基类ActionFilterAttribute,这个类实现了IActionFilter和IResultFilter接口,并且继承了Filter类。

    这里的术语并不完全一致,从技术上说,这个类继承ActionFitlerAttribute,并且同时实现了action filter和result filter接口,但是从宽松意义上说,在ASP.NET MVC Framework中,任何实现filter的类型都是action filter。

    ActionFilterAttribute类有以下的方法可以重写:

    • OnActionExecuting – 在controller action执行之前调用
    • OnActionExecuted – 在controller action执行之后调用
    • OnResultExecuting – 在controller action result执行之前调用
    • OnResultExecuted – 在controller action result执行之后调用

    下面会介绍如何实现这些方法。

    创建一个Log Action Filter

     

    为了阐述如何创建一个自定义的action filter,我们会创建一个自定义的action filter,用于记录controller action处理的不同阶段的日志信息,并显示到Visual Studio输出窗口中。

    image

    在上面代码中,OnActionExecuting()、OnActionExecuted()、OnResultExecuting()、OnResultExecuted()方法都调用Log()方法。把方法名称和当前route信息传递给Log()方法。Log()方法生成信息并输出到Visual Studio输出窗口中:

    image

    下图是修改后的HomeController中的代码,说明也可以把Log action filter应用到整个controller类上。每当有任何action被调用的时候,不管是Index()还是About()方法,各个处理阶段的日志都会记录到Visual Studio输出窗口中。

    总结

    在这篇指南中,介绍了ASP.NET MVC的action filter,了解了4种不同类型的filters,同时也了解了ActionFilterAttribute类,然后还学习了如何实现一个简单的action filter,我们创建了一个Log action filter,把action处理的各个阶段信息输出到Visual Studio的输出窗口中。

  • 相关阅读:
    springboot springcloud zuul 过滤器
    springboot springcloud eureka 熔断器
    javaweb servlet filter
    maven nexus 搭建私服(二)
    springboot springcloud zuul 网关入门
    springboot springcloud 配置中心
    springboot springcloud eureka 入门
    java rabbitmq
    java jvm调优
    maven nexus 搭建私服(一)
  • 原文地址:https://www.cnblogs.com/stalwart/p/1764870.html
Copyright © 2011-2022 走看看