.NET Core 开发实战
  • 目录
  • 第1课:课程介绍
  • 第2课:内容综述
  • 第3课:.NET Core的现状、未来以及环境搭建
  • 第4课:Startup:掌握ASP.NET Core的启动过程
  • 第5课:依赖注入:良好架构的起点
  • 第6课:作用域与对象释放行为
  • 第7课:用Autofac增强容器能力
  • 第8课:配置框架:让服务无缝适应各种环境
  • 第9课:命令行配置提供程序
  • 第10课:环境变量配置提供程序
  • 第11课:文件配置提供程序
  • 第12课:配置变更监听
  • 第13课:配置绑定:使用强类型对象承载配置数据
  • 第14课:自定义配置数据源:低成本实现定制化配置方案
  • 第15课:选项框架:服务组件集成配置的最佳实践
  • 第16课:选项数据热更新:让服务感知配置的变化
  • 第17课:为选项数据添加验证:避免错误配置的应用接收用户流量
  • 第18课:日志框架:聊聊记日志的最佳姿势
  • 第19课:日志作用域:解决不同请求之间的日志干扰
  • 第20课:结构化日志组件Serilog:记录对查询分析友好的日志
  • 第21课:中间件:掌控请求处理过程的关键
  • 第22课:异常处理中间件:区分真异常与逻辑异常
  • 第23课:静态文件中间件:前后端分离开发合并部署骚操作
  • 第24课:文件提供程序:让你可以将文件放在任何地方
  • 第25课:路由与终结点:如何规划好你的Web API
  • 第26课:工程结构概览:定义应用分层及依赖关系
  • 第27课:定义Entity:区分领域模型的内在逻辑和外在行为
  • 第28课:工作单元模式(UnitOfWork):管理好你的事务
  • 第29课:定义仓储:使用EF Core实现仓储层
  • 第30课:领域事件:提升业务内聚,实现模块解耦
  • 第31课:APIController:定义API的最佳实践
  • 第32课:集成事件:解决跨微服务的最终一致性
  • 第33课:集成事件:使用RabbitMQ来实现EventBus
  • 第34课:MediatR:轻松实现命令查询职责分离模式(CQRS)
  • 第35课:MediatR:让领域事件处理更加优雅
Powered by GitBook
On this page

第17课:为选项数据添加验证:避免错误配置的应用接收用户流量

学习分享 丨作者 / 郑 子 铭 丨公众号 / DotNet NB / CloudNative NB

三种验证方法

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源码链接:

Previous第16课:选项数据热更新:让服务感知配置的变化Next第18课:日志框架:聊聊记日志的最佳姿势

Last updated 3 years ago

https://github.com/MingsonZheng/DotNetCoreDevelopmentActualCombat/tree/main/OptionsDemo