• 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

  • 相关阅读:
    机器学习学习记录【持续更新】——pandas
    机器学习学习记录【持续更新】——降低损失
    Robcup2D足球学习记录【2020.01.30】
    Robcup2D足球学习记录【2020.01.18】
    Robcup2D足球学习记录【2020.01.14】
    javacript window对象
    mybatis if 语句嵌套
    hashMap 和 linkedHashMap 的区别和联系
    var let const的一些区别
    Jetty9开发(1)
  • 原文地址:https://www.cnblogs.com/cqqinjie/p/13321891.html
Copyright © 2020-2023  润新知