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”

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

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

  1. .NET Core开发实战(第5课:依赖注入:良好架构的起点)--学习笔记(上)

    05 | 依赖注入:良好架构的起点 为什么要使用依赖注入框架 借助依赖注入框架,我们可以轻松管理类之间的依赖,帮助我们在构建应用时遵循设计原则,确保代码的可维护性和可扩展性 ASP.NET Core ...

  2. .NET Core开发实战(定义API的最佳实践)Source Generators版

    前言 极客时间上的<.NET Core开发实战>是一门非常好的课程,作者肖伟宇在第31课(https://time.geekbang.org/course/detail/100044601 ...

  3. Xamarin iOS开发实战上册-----2.2.2 使用代码添加视图

    Xamarin iOS开发实战上册-----2.2.2  使用代码添加视图 如果开发者想要使用代码为主视图添加视图,该怎么办呢.以下将为开发者解决这一问题.要使用代码为主视图添加视图需要实现3个步骤. ...

  4. 基于 abp vNext 和 .NET Core 开发博客项目 - 使用Redis缓存数据

    基于 abp vNext 和 .NET Core 开发博客项目 - 使用Redis缓存数据 转载于:https://github.com/Meowv/Blog 在日志记录中使用的静态方法有人指出写法不 ...

  5. .NET Core开发实战(第15课:选项框架:服务组件集成配置的最佳实践)--学习笔记...

    15 | 选项框架:服务组件集成配置的最佳实践 这一节讲解如何使用选项框架来处理服务和配置的关系 选项框架的特性: 1.支持单例模式读取配置 2.支持快照 3.支持配置变更通知 4.支持运行时动态修改 ...

  6. .NET Core开发实战(第8课:配置框架:让服务无缝适应各种环境)--学习笔记

    08 | 配置框架:让服务无缝适应各种环境 配置是应用程序发布到各种环境的必备能力,这一节开始详细讲解 ASP.NET Core 的配置框架 配置框架的核心包有两个,一个抽象包,一个实现包 Micro ...

  7. 《离线和实时大数据开发实战》(二)大数据平台架构 技术概览

    前言 接着上一章 构建大数据开发知识体系图谱,本次继续分享邦中老师的<离线和实时大数据开发实战>读书笔记 .到底什么样的平台才能算是大数据平台呢?带着这个问题,我们开始今天的内容 ( •̀ ...

  8. 微信小程序实战须知2:详解数据API所需网络配置域名、Https、备案、SSL

    网络通信 小程序请求数据API时比较头疼,不能用想当然方式进行学习. 服务器域名.IP.HTTPS 域名1 域名(Domain Name):又称网域,是由一串用点分隔的名字组成的Internet上某一 ...

  9. .NET Core开发实战(第33课:集成事件:使用RabbitMQ来实现EventBus)--学习笔记(上)...

    33 | 集成事件:使用RabbitMQ来实现EventBus 这一节我们来讲解如何通过 CAP 组件和 RabbitMQ 来实现 EventBus 要实现 EventBus,我们这里借助了 Rabb ...

最新文章

  1. HDU 3507:Print Article
  2. 编程语言python入门要电脑什么配置能带动-要学一门编程语言,那我一定选择Python!...
  3. 迷难的北京行 – 2012.08.19
  4. php输出股票价格代码,实时抓取YAHOO股票报价的php代码_PHP教程 - strrpos
  5. shell模拟php多进程从redis获取数据
  6. MySQL中的pid与socket是什么?
  7. 8类网线利弊_网线买机制成品还是自己DIY?有这些点要注意
  8. php : 常用函数
  9. 千博HTML5自适应企业网站系统源码
  10. MyBatis学习总结(19)——Mybatis传多个参数(三种解决方案)
  11. Hibernate Search v.4.2.0.CR1 发布
  12. windows11百度网盘下载,win11iso镜像百度云下载
  13. NYOJ - 独木舟上的旅行(贪心)
  14. nmap的网络拓扑实现
  15. 有四个圆塔,圆心分别为(2,2)、(-2,2)、(2,-2)、(-2,-2),圆半径为1.这四个塔的高度为10米。塔以外无建筑物。今输入一个点的坐标,求该点的建筑高度(塔外的高度为0m)
  16. 微信小程序车牌组件代码
  17. kafka中的ISR、AR又代表什么?ISR伸缩又是什么?
  18. mysql函数名称顿号_在中文Windows 7的输入中文标点符号状态下,按下列( )可以输入中文标点符号顿号...
  19. Flutter网络请求库DIO的使用
  20. 电子或通讯领域当前的主流技术及其社会需求调查报告

热门文章

  1. 数字图像处理技术在TWaver可视化中的应用
  2. Effective C# 原则35:选择重写函数而不是使用事件句柄(译)
  3. php 打印对象详细信息,php打印显示数组与对象的函数详解
  4. Linux包系列的知识(附:Ubuntu16.04升级到18.04的案例)
  5. Rabbitmq~对Vhost的配置
  6. lintcode 418整数转罗马数字
  7. ARP-Address Resolution Protocol-地址解析协议
  8. Swift和Objective-C混编 1
  9. Linux常用C函数-接口处理篇(网络通信函数)
  10. C# 动态创建控件时注册Name属性