- 三种IOptions:
下面是代码文件:
Program.cs
using Microsoft.Extensions.Options;var builder = WebApplication.CreateBuilder(args);builder.Services.AddOptions<Setting>().BindConfiguration("Setting");var app = builder.Build();app.Services.GetService<IOptionsMonitor<Setting>>()?.OnChange((setting, name) => {app.Logger.LogInformation(setting.Value); });app.MapGet("/opt1", (IOptions<Setting> option) => {app.Logger.LogInformation("opt1");return option.Value; }); app.MapGet("/opt2", (IOptionsSnapshot<Setting> option) => {app.Logger.LogInformation("opt2");return option.Value; }); app.MapGet("/opt3", (IOptionsMonitor<Setting> option) => {app.Logger.LogInformation("opt3");return option.CurrentValue; }); app.Run();class Setting {public string Name { get; set; }public string Value { get; set; } }
appsettings.json
{"Logging": {"LogLevel": {"Default": "Information","Microsoft.AspNetCore": "Warning"}},"AllowedHosts": "*","Setting": {"Name": "key","Value": "1234567890"} }
OptionDemo.http
@OptionDemo_HostAddress = http://localhost:5064 GET {{OptionDemo_HostAddress}}/opt1 Accept: application/json###GET {{OptionDemo_HostAddress}}/opt2 Accept: application/json###GET {{OptionDemo_HostAddress}}/opt3 Accept: application/json###
打开OptionDemo.http,点击Opt1,Opt2,Opt3的“发送请求”,结果如下:
把 appsettings.json中的Setting的Value改成“1234567890ABCD”,结果如下:
请求Opt1结果:
请求Opt2结果:
请求Opt3结果:
- 验证:
可以通过Validate()方法对Options进行验证,目前有两种验证点,一个是服务启动时,即有ValidateOnStart方法;另外一种是在使用这个Options时,即不写ValidateOnStart方法。
builder.Services.AddOptions<Setting>().BindConfiguration("Setting").ValidateOnStart<Setting>().Validate(setting =>{return !string.IsNullOrWhiteSpace(setting.Name) && !string.IsNullOrWhiteSpace(setting.Value); }, "Setting配置有误");
触发错误如下:
利用Validate是自定义验证,当然也可以利用DataAnnotations进行验证,代码如下:
builder.Services.AddOptions<Setting>().BindConfiguration("Setting").ValidateDataAnnotations();
触发错误如下:
文章来源微信公众号
想要更快更方便的了解相关知识,可以关注微信公众号