zoukankan      html  css  js  c++  java
  • asp.net core2 mvc 基础教程--过滤器

    Filter

    • 专用于 MVC
    • 可以在 MVC 的请求管道里添加逻辑
    • 之前、之后
    • Cross-cutting concerns(贯穿特性)
    • 避免代码重复
    • 常用场景
    • 授权
    • 需要 HTTPS

    注:Filter 是专用于 MVC 管道的,不同于之前讲的 ASP.NET Core 的管道。

    MVC 管道:

    image.png

    Filter 种类:

    • 授权
    • 资源
    • Action
    • 异常
    • Result

    实现 Filter

    • IFilterMetadata
    • IAuthorizationFilter, IAsyncAuthorizationFilter
    • IResourceFilter(这几个也都有异步版本)
    • IActionFilter
    • IExceptionFilter
    • IResultFilter

    同步版:

    public class LogResourceFilter : Attribute, IResourceFilter
    {
        public void OnResourceExecuting(ResourceExecutingContext context)
        {
            Console.WriteLine("Executing Resource Filter!");
        }
        public void OnResourceExecuted(ResourceExecutedContext context)
        {
            Console.WriteLine("Executed Resource Filter...");
        }
    }

    异步版:

    public class LogAsyncResourceFilter : Attribute, IAsyncResourceFilter
    {
        public async Task OnResourceExecutionAsync(
            ResourceExecutingContext context, 
            ResourceExecutionDelegate next)
        {
            Console.WriteLine("Executing Resource Filter!");
            var executedContext = await next();
            Console.WriteLine("Executed Resource Filter...");
        }
    }

    应用 Filter

    • Action:通过特性标注
    • Controller:通过特性标注
    • 全局:通过 Startup 配置

    配置全局 Filter:

    services.AddMvc(options =>
    {
        options.Filters.Add(new AutoValidateAntiforgeryTokenAttribute());
        //options.Filters.Add(new LogResourceFilter());
        //options.Filters.Add(typeof(LogAsyncResourceFilter));
        options.Filters.Add<LogResourceFilter>();
    });

    效果:

    image.png

    几种 Filter 的执行顺序:

    image.png

  • 相关阅读:
    cnpm 安装和 command not found
    C#-弄懂泛型和协变、逆变
    2019年阅读
    ES5和ES6数组方法
    ASP.NET MVC中的捆绑和压缩技术
    markdown解析与着色
    Oauth2.0
    同源策略和跨域的解决方案
    windows常用命令
    Java 9 在win10环境搭建
  • 原文地址:https://www.cnblogs.com/cqqinjie/p/13321891.html
Copyright © 2011-2022 走看看