• .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) 。

  • 相关阅读:
    Visio使用遇到的问题
    UML类图符号 各种关系说明以及举例
    测试人员与开发人员之间的关系如何?
    linux命令学习-复制(cp,scp)
    linux服务器报Too many open files的解决方法
    QTP学习一添加默认的注释及调用外部vbs文件
    关于JAVA应用中文字体显示小方框的问题解决
    web测试方法总结
    linux命令学习-su
    Oracle定义varchar2()类型存储汉字的长度问题
  • 原文地址:https://www.cnblogs.com/MingsonZheng/p/12417178.html
Copyright © 2020-2023  润新知