如何从 programs.cs Blazor 应用中的配置获取 appsettings.json 中的设置值
How do I get the value of a setting in appsettings.json from configuration in programs.cs Blazor app
任何人都可以告诉我如何从 Blazor(核心 5)应用程序的 program.cs 文件中的 appsettings.json 文件中获取值。
基本上只需要正确编写“var seqUrl =”即可。我认为。
请谢谢。
在我 Program.cs 的 Main 方法中,我有
IConfiguration configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", false, true)
.AddJsonFile("appsettings.Development.json", true, true)
.Build();
var levelSwitch = new LoggingLevelSwitch();
var seqUrl = configuration.GetSection("SeriLog").GetSection("WriteTo").GetSection("Name:Seq").GetSection("Args").GetSection("serverUrl").Value;
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(configuration)
.MinimumLevel.ControlledBy(levelSwitch)
.WriteTo.Seq(seqUrl,
apiKey: "xxxxxxxxxxxx",
controlLevelSwitch: levelSwitch)
.CreateLogger();
我的 appsettings.json 看起来像这样。
"SeriLog": {
"Using": [
"Serilog.Sinks.File",
"Serilog.Sinks.Seq",
"Serilog.Sinks.Console"
],
"MinimumLevel": {
"Default": "Information",
"Override": {
"Microsoft": "Warning",
"system": "Warning"
}
},
"Enrich": [ "WithMachineName", "WithEnvironmentUserName", "WithClientIp", "WithClientAgent", "WithEnvironmentName", "WithProcessId", "WithProcessName", "WithThreadId" ],
"WriteTo": [
{
"Name": "File",
"Args": {
"path": "C:\Temp\Logs\JsonLog.json",
"formatter": "Serilog.Formatting.Json.JsonFormatter, Serilog",
"rollingInterval": "Day"
}
},
{
"Name": "Seq",
"Args": {
"serverUrl": "http://xxxxxxxxxxx"
}
}
]
我认为您应该考虑在您的 appsettings 文件中重组 JSON。 “WriteTo”的值是一个数组,但我会让它只是一个对象而不是数组,那么每个元素都应该是一个子对象。使用“名称”变量来命名它们。像这样:
"WriteTo": {
"File": {
"Args": {
"path": "C:\Temp\Logs\JsonLog.json",
"formatter": "Serilog.Formatting.Json.JsonFormatter, Serilog",
"rollingInterval": "Day"
}
},
"Seq": {
"Args": {
"serverUrl": "http://xxxxxxxxxxx"
}
}
}
然后您应该能够使用与您相同的样式检索值,只需使用所需变量的完整路径即可。例如:
var seqUrl = configuration.GetSection("SeriLog:WriteTo:Seq:serverUrl").Value;
我不记得这个语法是否 100% 正确(路径可能不是冒号分隔,我不完全确定)但这个概念应该有效。您只是没有在代码中的 .GetSection()
方法中输入正确的名称,我认为当您尝试检索这样的数组元素时会有点棘手,因此我建议从数组转换为简单的对象。
任何人都可以告诉我如何从 Blazor(核心 5)应用程序的 program.cs 文件中的 appsettings.json 文件中获取值。 基本上只需要正确编写“var seqUrl =”即可。我认为。 请谢谢。
在我 Program.cs 的 Main 方法中,我有
IConfiguration configuration = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", false, true)
.AddJsonFile("appsettings.Development.json", true, true)
.Build();
var levelSwitch = new LoggingLevelSwitch();
var seqUrl = configuration.GetSection("SeriLog").GetSection("WriteTo").GetSection("Name:Seq").GetSection("Args").GetSection("serverUrl").Value;
Log.Logger = new LoggerConfiguration()
.ReadFrom.Configuration(configuration)
.MinimumLevel.ControlledBy(levelSwitch)
.WriteTo.Seq(seqUrl,
apiKey: "xxxxxxxxxxxx",
controlLevelSwitch: levelSwitch)
.CreateLogger();
我的 appsettings.json 看起来像这样。
"SeriLog": {
"Using": [
"Serilog.Sinks.File",
"Serilog.Sinks.Seq",
"Serilog.Sinks.Console"
],
"MinimumLevel": {
"Default": "Information",
"Override": {
"Microsoft": "Warning",
"system": "Warning"
}
},
"Enrich": [ "WithMachineName", "WithEnvironmentUserName", "WithClientIp", "WithClientAgent", "WithEnvironmentName", "WithProcessId", "WithProcessName", "WithThreadId" ],
"WriteTo": [
{
"Name": "File",
"Args": {
"path": "C:\Temp\Logs\JsonLog.json",
"formatter": "Serilog.Formatting.Json.JsonFormatter, Serilog",
"rollingInterval": "Day"
}
},
{
"Name": "Seq",
"Args": {
"serverUrl": "http://xxxxxxxxxxx"
}
}
]
我认为您应该考虑在您的 appsettings 文件中重组 JSON。 “WriteTo”的值是一个数组,但我会让它只是一个对象而不是数组,那么每个元素都应该是一个子对象。使用“名称”变量来命名它们。像这样:
"WriteTo": {
"File": {
"Args": {
"path": "C:\Temp\Logs\JsonLog.json",
"formatter": "Serilog.Formatting.Json.JsonFormatter, Serilog",
"rollingInterval": "Day"
}
},
"Seq": {
"Args": {
"serverUrl": "http://xxxxxxxxxxx"
}
}
}
然后您应该能够使用与您相同的样式检索值,只需使用所需变量的完整路径即可。例如:
var seqUrl = configuration.GetSection("SeriLog:WriteTo:Seq:serverUrl").Value;
我不记得这个语法是否 100% 正确(路径可能不是冒号分隔,我不完全确定)但这个概念应该有效。您只是没有在代码中的 .GetSection()
方法中输入正确的名称,我认为当您尝试检索这样的数组元素时会有点棘手,因此我建议从数组转换为简单的对象。