.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”
总结一下,通过添加选项的验证,可以在配置错误的情况下阻止应用程序启动,这样就可以避免用户流量达到错误的节点上
GitHub源码链接:
https://github.com/MingsonZheng/DotNetCoreDevelopmentActualCombat/tree/main/OptionsDemo



本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
欢迎转载、使用、重新发布,但务必保留文章署名 郑子铭 (包含链接: http://www.cnblogs.com/MingsonZheng/ ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。
如有任何疑问,请与我联系 (MingsonZheng@outlook.com) 。
.NET Core开发实战(第17课:为选项数据添加验证:避免错误配置的应用接收用户流量)--学习笔记的更多相关文章
- 2月送书福利:ASP.NET Core开发实战
大家都知道我有一个公众号“恰童鞋骚年”,在公众号2020年第一天发布的推文<2020年,请让我重新介绍我自己>中,我曾说到我会在2020年中每个月为所有关注“恰童鞋骚年”公众号的童鞋们送一 ...
- [ASP.NET Core开发实战]开篇词
前言 本系列课程文章主要是学习官方文档,再输出自己学习心得,希望对你有所帮助. 课程大纲 本系列课程主要分为三个部分:基础篇.实战篇和部署篇. 希望通过本系列课程,能让大家初步掌握使用ASP.NET ...
- React Native移动开发实战-3-实现页面间的数据传递
React Native使用props来实现页面间数据传递和通信.在React Native中,有两种方式可以存储和传递数据:props(属性)以及state(状态),其中: props通常是在父组件 ...
- .NET Core开发实战(第11课:文件配置提供程序)--学习笔记
11 | 文件配置提供程序:自由选择配置的格式 文件配置提供程序 Microsoft.Extensions.Configuration.Ini Microsoft.Extensions.Configu ...
- 2、SpringBoot接口Http协议开发实战8节课(1-6)
1.SpringBoot2.xHTTP请求配置讲解 简介:SpringBoot2.xHTTP请求注解讲解和简化注解配置技巧 1.@RestController and @RequestMapping是 ...
- [ASP.NET Core开发实战]基础篇03 中间件
什么是中间件 中间件是一种装配到应用管道,以处理请求和响应的组件.每个中间件: 选择是否将请求传递到管道中的下一个中间件. 可在管道中的下一个中间件前后执行. ASP.NET Core请求管道包含一系 ...
- [ASP.NET Core开发实战]基础篇02 依赖注入
ASP.NET Core的底层机制之一是依赖注入(DI)设计模式,因此要好好掌握依赖注入的用法. 什么是依赖注入 我们看一下下面的例子: public class MyDependency { pub ...
- [ASP.NET Core开发实战]基础篇01 Startup
Startup,顾名思义,就是启动类,用于配置ASP.NET Core应用的服务和请求管道. Startup有两个主要作用: 通过ConfigureServices方法配置应用的服务.服务是一个提供应 ...
- 2、SpringBoot接口Http协议开发实战8节课(7-8)
7.SpringBoot2.x文件上传实战 简介:讲解HTML页面文件上传和后端处理实战 1.讲解springboot文件上传 MultipartFile file,源自SpringMVC 1)静态页 ...
- [ASP.NET Core开发实战]基础篇06 配置
配置,是应用程序很重要的组成部分,常常用于提供信息,像第三方应用登录钥匙.上传格式与大小限制等等. ASP.NET Core提供一系列配置提供程序读取配置文件或配置项信息. ASP.NET Core项 ...
随机推荐
- 处理uniapp(同理小程序)开发中使用rich-text富文本解析,图片未自适应宽度问题(图片显示不全)
https://www.cnblogs.com/luyaru/p/15538883.html
- 搞了个Blazor工具站,域名一次性买了10年!
大家好,我是沙漠尽头的狼. 在 Dotnet9 上线在线小工具和小游戏后,服务器的压力感觉挺大的,打开25个页面,内存占用170MB左右,CPU保持在60~70%,看来Server真不适合搞这类交互较 ...
- 使用QQ屏幕识图实现识别表格功能
1.问题 目前市场上的OCR工具对于识别表格功能均是采取了收费制度,但我们时常要进行一些表格的复制(原表格为图片) 便可以使用QQ或钉钉自带的功能来实现 2.解决 1.QQ屏幕识图 先使用屏幕识图功能 ...
- Python学习之十四_Python连接各种数据库的方法(DM,oscar,Oracle,SQLSERVER,MYSQL,PG,Kingbase
Python学习之十四_Python连接各种数据库的方法(DM,oscar,Oracle,SQLSERVER,MYSQL,PG,Kingbase) 前言 想着能够使用多种数据库进行一些操作. 所以本文 ...
- [转帖]Rocksdb的优劣及应用场景分析
研究Rocksdb已经有七个月的时间了,这期间阅读了它的大部分代码,对底层存储引擎进行了适配,同时也做了大量的测试.在正式研究之前由于对其在本地存储引擎这个江湖地位的膜拜,把它想象的很完美,深入摸 ...
- [转帖]SIMD指令集 SSE/AVX
SIMD指令集 SSE/AVX 概述 参考手册 Intel Intrinsics Guide Tommesani.com Docs Intel 64 and IA-32 Architectures S ...
- [转帖]shell脚本使用expect自动化交互登录远程主机进行批量关机
前文 1.目标主机登录用户都为root,且密码一致 2.目标主机开放启动了SSH服务且22号端口可访问(防火墙未进行拦截) 软件介绍 expect Expect是一个用来实现自动和交互式任务进行通信的 ...
- [转帖]Kafka需要知道的一些基础知识点
https://blog.csdn.net/daima_caigou/article/details/109101405 前言 kafka是常用MQ的一种,站在使用者的角度来看待,kafka以及所有的 ...
- 深度解析C#数组对象池ArrayPool<T>底层原理
提到池化技术,很多同学可能都不会感到陌生,因为无论是在我们的项目中,还是在学习的过程的过程,都会接触到池化技术.池化技术旨在提高资源的重复使用和系统性能,在.NET中包含以下几种常用的池化技术. (1 ...
- js中toString方法的三个作用
toString方法的三个作用: 1.返回一个[表示对象]的[字符串] 2.检测对象的类型 Object.prototype.toString.call(arr)==="[object Ar ...