如果我有以下设置,有没有办法从Program.cs内请求设置.

appsettings.json:

{
  "Settings": {
    "UseMemory": false,
    "Cors": {
      "Origins": "*",
      "Headers": "*",
      "Methods": "*"
    }
  }
}

设置型号:

public class AppSettings
{
    public bool? UseMemory { get; set; }
    public CorsSettings? Cors { get; set; }
}

public class CorsSettings
{
    public required string Origins { get; set; }
    public required string Headers { get; set; }
    public required string Methods { get; set; }
}

这些都是我的try ,但设置始终是null(Program.Main内)

var builder = WebApplication.CreateBuilder(args);
var appSettings = builder.Configuration.GetRequiredSection("Settings");
builder.Services.Configure<Models.AppSettings>(appSettings);
...
var settings = builder.Configuration.Get<Models.AppSettings>(); // { UseMemory: null, Cors: null }
var builder = WebApplication.CreateBuilder(args);
var settings = builder.Configuration.GetValue<Models.AppSettings>("Settings"); // null
var settingsText = builder.Configuration.GetValue<string>("Settings"); // null

这很"管用",但我希望找到一种方法,将所有设置放在一个整齐的对象中:

var builder = WebApplication.CreateBuilder(args);
var settingsText = builder.Configuration.GetSection("Settings").GetValue<string>("UseMemory"); // false

推荐答案

下面应该可以做到这一点.

var appSettings = builder.Configuration.GetRequiredSection("Settings").Get<AppSettings>();

Visual Studio中的"快速监视"窗口显示预期的属性值.

enter image description here

Csharp相关问答推荐

我可以 suppress 规则CS 9035一次吗?

在C#中使用in修饰符

如何使用C#和Graph API从Azure Directory获取用户详细信息

在C#中,有没有一种方法可以集中定义跨多个方法使用的XML参数描述符?

C#无法让WinForm进度条生成动画错误跨线程操作无效

如何通过属性初始化器强制初始化继承记录内的属性?

确定System.Text.Json序列化中是否无法识别Type

如何在Cosmos SDK中控制超时、重试和重试之间的延迟?

为什么@rendermode Interactive Auto不能在.NET 8.0 Blazor中运行?

如何正确处置所有动态控件?

如何对特定异常使用Polly重试机制?

如何解决System.StackOverflowException:抛出System.StackOverflowException类型的异常.&# 39;生成随机代码时发生异常?

我是否应该注销全局异常处理程序

多个参数的最小API删除

在C#和HttpClient中使用REST API

在Unity C#中按键点击错误的参数

外部应用&&的LINQ;左外部连接&类似于PostgreSQL的查询

实例化列表时的集合表达式是什么?

是否在异步方法中避免Span<;T>;.ToArray()?

ASP.NET Core 7空字符串