• .NET Core开发实战(第17课:为选项数据添加验证:避免错误配置的应用接收用户流量)--学习笔记


    17 | 为选项数据添加验证:避免错误配置的应用接收用户流量

    三种验证方法

    1、直接注册验证函数

    2、实现 IValidateOptions

    3、使用 Microsoft.Extensions.Options.DataAnnotations

    延用上一节代码

    需要添加验证的时候不能用 Configure,而用 AddOptions 方法

    //services.Configure<OrderServiceOptions>(configuration);
    
    services.AddOptions<OrderServiceOptions>().Configure(options =>
    {
        configuration.Bind(options);
    }).Validate(options =>
    {
        return options.MaxOrderCount <= 100;
    }, "MaxOrderCount 不能大于100");
    

    配置中的值是200,所以运行之后报错,提示 “MaxOrderCount 不能大于100”

    接着使用属性的方式,切换成属性注入

    services.AddOptions<OrderServiceOptions>().Configure(options =>
    {
        configuration.Bind(options);
    }).ValidateDataAnnotations();
    

    还需要修改 OrderServiceOptions,定义它的验证属性

    public class OrderServiceOptions
    {
    [Range(30, 100)]
    public int MaxOrderCount { get; set; } = 100;
    }
    

    配置中的值是200,所以运行之后报错,提示 “MaxOrderCount 的值必须在30到100之间”

    接着是第三种方式,实现接口的方式

    首先是定义验证类

    public class OrderServiceValidateOptions : IValidateOptions<OrderServiceOptions>
    {
        public ValidateOptionsResult Validate(string name, OrderServiceOptions options)
        {
            if (options.MaxOrderCount > 100)
            {
                return ValidateOptionsResult.Fail("MaxOrderCount 不能大于100");
            }
            else
            {
                return ValidateOptionsResult.Success;
            }
        }
    }
    

    要使用这个类,需要注入进去

    services.AddOptions<OrderServiceOptions>().Configure(options =>
    {
        configuration.Bind(options);
    }).Services.AddSingleton<IValidateOptions<OrderServiceOptions>>(new OrderServiceValidateOptions( ));
    

    配置中的值是200,所以运行之后报错,提示 “MaxOrderCount 不能大于100”

    总结一下,通过添加选项的验证,可以在配置错误的情况下阻止应用程序启动,这样就可以避免用户流量达到错误的节点上

    知识共享许可协议

    本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。

    欢迎转载、使用、重新发布,但务必保留文章署名 郑子铭 (包含链接: http://www.cnblogs.com/MingsonZheng/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。

    如有任何疑问,请与我联系 (MingsonZheng@outlook.com) 。

  • 相关阅读:
    大话设计模式笔记 观察者模式
    nginx限速
    枚举实现的单例模式
    Nginx负载均衡
    插件lombok的介绍安装
    ThreadLocal类
    CopyOnWriteArrayList并发容器
    ConcurrentHashMap实现原理
    elasticsearch配置文件
    sql优化
  • 原文地址:https://www.cnblogs.com/MingsonZheng/p/12417178.html
Copyright © 2020-2023  润新知