zoukankan      html  css  js  c++  java
  • .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) 。

  • 相关阅读:
    网站迁移服务器后CPU、内存飙升,设置robots.txt 问题
    System.Web.Mvc 找到的程序集清单定义与程序集引用不匹配
    滑动窗口协议
    TCP拥塞控制
    计网常用协议
    TCP协议中的三次握手、四次挥手
    浏览网页的详细过程
    docker网络模式
    openstack网络
    查找算法
  • 原文地址:https://www.cnblogs.com/MingsonZheng/p/12417178.html
Copyright © 2011-2022 走看看