asp.net core配置验证
Posted dotNET跨平台
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了asp.net core配置验证相关的知识,希望对你有一定的参考价值。
在开发asp.net core时,通常会在appsettings.json中配置信息,这些信息都是以一个json的格式存储,在程序中通过Options的方式来绑定实体类使用,如下面的APIConfig和实体类。
配置文件:
"Logging":
"LogLevel":
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
,
"AllowedHosts": "*",
"APIConfig":
"TimeOut": 2000,
"Category": "Small",
"Max": 1.5
APIConfig实体类:
public class APIConfig
public int TimeOut get; set;
public string? Category get; set;
public double Max get; set;
public enum Category
None,
Large,
Small,
Middle
配置裸奔是有相当风险的,每个配置项都应该特定的含义和范围,当不合规配置随着系统启动,悄悄地进入服务状态时,就相当埋了一颗雷,肯定有人会在某时间踩上,爆掉,形成一次生产事帮。为了把这个风险消除掉,那就要给这些配置设置个围栏——即验证。
可以在服务启动时,添加Valdate来验证配置文件。首先用Bind方式取出要验证的配置实体,再次就是用Validate方法逐个验证为了把问题尽早暴露,当然,怎么验证,验证那些属性,自行决定。
using Microsoft.Extensions.Options;
using System.ComponentModel.DataAnnotations;
var builder = WebApplication.CreateBuilder(args);
builder.Services
.AddOptions<APIConfig>()
.Bind(builder.Configuration.GetSection(nameof(APIConfig)))
.Validate(c =>
return c.TimeOut > 0 && c.TimeOut <= 1000 && c.Max >= -1.5 && c.Max <= 1.5 && Enum.TryParse<Category>(c.Category, true, out Category o);
,"APIConfig配置有误!")
.ValidateOnStart();
var app = builder.Build();
app.MapGet("/apiconfig", (IOptions<APIConfig> options) =>
return options.Value;
);
app.Run();
其实验证在.net很普及,使用的是DataAnnotations,当然,这里也不例外,可以在实体类上添加具体的验证规则,这里就不展开了。代码如下:
using Microsoft.Extensions.Options;
using System.ComponentModel.DataAnnotations;
var builder = WebApplication.CreateBuilder(args);
builder.Services
.AddOptions<APIConfig>()
.Bind(builder.Configuration.GetSection(nameof(APIConfig)))
.ValidateDataAnnotations()
.ValidateOnStart();
var app = builder.Build();
app.MapGet("/apiconfig", (IOptions<APIConfig> options) =>
return options.Value;
);
app.Run();
public class APIConfig
[Range(0,1000)]
public int TimeOut get; set;
[EnumDataType(typeof(Category))]
public string? Category get; set;
[Range(-1.5, 1.5)]
public double Max get; set;
public enum Category
None,
Large,
Small,
Middle
保障生产安全,再多一点努力也是值的。不放过每个小细节,让你的服务在成长。
以上是关于asp.net core配置验证的主要内容,如果未能解决你的问题,请参考以下文章
如何在 ASP.NET Core 2.2 中使用 IValidateOptions 验证配置设置?
使用 IClientModelValidator 在 ASP.NET Core 中使用参数自定义客户端验证属性
ASP.NET Core 2.2 中的 Azure AD 身份验证
ASP.NET与ASP.NET Core用户验证Cookie并存解决方案