如何从下面显示的 appsettings.json 文件中读取 URL 值?
{
"Serilog": {
"WriteTo": [
{
"Name": "Seq",
"Args": {
"serverUrl": "http://localhost:1234"
}
}
]
}
}
我尝试了下面的代码片段,但它给出了 null。
var configurationBuilder = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", optional: false)
.AddJsonFile($"appsettings.{environmentName}.json", optional: true)
.AddEnvironmentVariables();
IConfiguration _configuration = configurationBuilder.Build();
// 1st attempt
var url = _configuration.GetSection("Serilog").GetChildren().First()["Args::serverUrl"];
// 2nd attempt
var url = _configuration.GetValue<string>("Serilog:WriteTo:Args::serverUrl");
// 3rd attempt
var url = _configuration.GetSection("Serilog").GetChildren().First().GetSection("Args").GetValue("serverUrl");
这些尝试都没有成功。
存在一些类似的问题,但没有一个涉及从集合中获取单个值。
namespace BlazorApp
{
public class Args
{
public string ServerUrl { get; set; }
}
public class WriteToConfig
{
public string Name { get; set; }
public Args Args { get; set; }
}
public class SerilogConfig()
{
public Dictionary<string, List<WriteToConfig>> Serilog { get; set; }
}
public class Serilogg
{
}
}
Programm.cs:
var config = JsonConvert.DeserializeObject<BlazorApp.SerilogConfig>(File.ReadAllText("appsettings.json"), serializerSettings);
string serverUrl = config?.Serilog?["WriteTo"]?[0]?.Args?.ServerUrl;
appsettings.json:
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"Serilog": {
"WriteTo": [
{
"Name": "Seq",
"Args": {
"serverUrl": "http://localhost:1234"
}
}
]
}
}