如何避免错误配置的应用接收用户流量?

简介: 如何避免错误配置的应用接收用户流量?

上一节,我们学习了通过选项框架IOptions<>来让服务组件集成配置,同时,也学习了让服务感知配置变更的选项配置热更新框架IOptionsSnapshot、IOptionsMonitor以及对配置进行操作的PostConfigure方法。那么,本篇,我们接着来学习一下如何通过为选项数据添加验证来避免错误配置的应用接收用户流量。


一般的,我们可以通过以下三种方式来实现数据验证

  • 直接注册验证函数
  • 实现IValidateOptions
  • 使用Microsoft.Extension.Options.DataAnnotations


下面,我们通过代码来看一下具体操作。


直接注册验证函数

服务在注册时,提供了Validate函数来让我们注册验证函数,validate函数接受2个参数,一个是bool类型的判断条件,一个是需要打印的信息。


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

当然,Validate函数是一个多重载函数,可以根据实际的需要选择合适的重载方法。


实现IValidateOptions

IValidateOptions接口包含一个Validate方法,方法包括2个入参,一个stirng类型,一个需要验证的类型T,我们还使用上节的代码,首先定义一个类OrderOptionsValidate来实现IValidateOptions<OrderOptions>接口,


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


验证类实现完成后,在服务注册时,可以通过如下方式来添加该验证类。


services.AddOptions<OrderOptions>().Configure(options =>
{
    configuration.Bind(options);
}).Services.AddSingleton<IValidateOptions<OrderOptions>, OrderOptionsValidate>();


Microsoft.Extension.Options.DataAnnotations

最后一种,相对比较简单,我们可以使用类似EntityFramework的DataAnnotations的属性标注形式来完成数据验证。
比如,我们在类定义时,可以使用属性标注来限制MaxOrderCount


public class OrderOptions
{
    [Range(1,20)]
    public int MaxOrderCount { get; set; } = 100;
    public int TotalCount { get; set; } = 500;
}


在服务注册时,只需要简单的ValidateDataAnnotations方法即可实现数据验证。


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


那么到这里,我们就学习完了选项框架数据验证的3种方式,而且选项框架部分也暂告一段落,我们来回顾一下,选项框架IOptions<>可以隔离服务和配置,是服务不必依赖于配置框架从而达到解耦;同时,选项框架提供IOptionsSnapshot、IOptionsMonitor来实现配置热更新的能力,并且,通过方法PostConfigure来实现对配置操作;最后,我们可以通过

  • 直接注册验证函数
  • 实现IValidateOptions
  • Microsoft.Extension.Options.DataAnnotations


3种方式来实现对选项框架的数据验证。


下篇,我们将进入日志框架部分的学习,让我们一起加油。


详细代码请参阅


https://github.com/IronMarmot/Samples/tree/master/CoreSamples
相关文章
|
12月前
|
Java 测试技术 调度
【ACK秒级部署】20万用户在10秒处理所有请求每个用户每秒5次请求
【ACK秒级部署】20万用户在10秒处理所有请求每个用户每秒5次请求
|
5月前
|
监控 安全 持续交付
【专栏】Webhook是服务器主动发送事件通知的机制,打破传统客户端轮询模式,实现数据实时高效传递。
【4月更文挑战第29天】Webhook是服务器主动发送事件通知的机制,打破传统客户端轮询模式,实现数据实时高效传递。常用于持续集成部署、第三方服务集成、实时数据同步和监控告警。具有实时性、高效性和灵活性优势,但也面临安全风险和调试挑战。理解并善用Webhook能提升系统性能,广泛应用于现代软件开发和集成。
366 0
|
网络协议 Shell Perl
根据web访问日志,封禁请求量异常的IP,如IP在半小时后恢复正常,则解除封禁
根据web访问日志,封禁请求量异常的IP,如IP在半小时后恢复正常,则解除封禁
98 1
|
网络协议 测试技术 Go
海量用户通讯系统-服务器接收消息1
海量用户通讯系统-服务器接收消息1
海量用户通讯系统-服务器接收消息1
|
JSON 网络协议 测试技术
海量用户通讯系统-服务器接收消息2|学习笔记
快速学习海量用户通讯系统-服务器接收消息2
海量用户通讯系统-服务器接收消息2|学习笔记
|
网络协议 物联网
DFP 数据转发协议应用实例 4.修改网络中指定设备的参数
稳控科技编写的一套数据转发规则, 取自“自由转发协议 FFP(Free Forward Protocol)” ,或者 DFP(DoubleF Protocol), DF 也可以理解为 Datas Forward(数据转发)的缩写。DF 协议是与硬件接口无关的数据链路层协议,规定了数据流如何在不同设备之间、不同接口之间的传输方向。 DF 协议一般用于延长数字接口的传输距离(数据中继),它与硬件接口类型无关,可以基于 UART、 LoRA、TCP 等异步数据传输介质。
DFP 数据转发协议应用实例  4.修改网络中指定设备的参数
|
存储 IDE 开发工具
CAN通信配置过滤器和使用三个邮箱发送
CAN通信配置过滤器和使用三个邮箱发送
827 0
|
前端开发 Android开发
仅接收服务器数据的长链接方案
仅接收服务器数据的长链接方案
281 0
仅接收服务器数据的长链接方案
|
监控 数据库
服务器遇到大流量***的处理过程
案例描述 早上接到IDC的电话,说我们的一个网段IP不停的向外发包,应该是被***了,具体哪个IP不知道,让我们检查一下。 按理分析及解决办法 首先我们要先确定是哪台机器的网卡在向外发包,还好我们这边有zabbix监控,我就一台一台的检查,发现有一台的流量跑满了,问题应该出现在这台机器上面。
703 0
下一篇
无影云桌面