Как я могу прочитать значение URL-адреса из показанного ниже файла appsettings.json без создания класса для загрузки значений через DI?
{
"Serilog": {
"WriteTo": [
{
"Name": "Seq",
"Args": {
"serverUrl": "http://localhost:1234"
}
}
]
}
}
Я попробовал приведенный ниже фрагмент, но он дает ноль.
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");
Ни одна из этих попыток не увенчалась успехом.
Есть несколько подобных вопросов, но ни один из них не касается получения одного значения из коллекции.
Извините, я не совсем знаком с «этими словами». Английский не мой родной язык.
Это ваша исправленная вторая попытка без каких-либо зависимостей/классов:
var configurationBuilder2 = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", optional: false)
.AddEnvironmentVariables();
IConfiguration _configuration2 = configurationBuilder2.Build();
var url2 = _configuration2.GetValue<string>("Serilog:WriteTo:0:Args:serverUrl");
У вас только что была небольшая опечатка, поэтому вы не получили правильный доступ к ключу.
Получить элемент массива в конфигурации можно, задав индекс. Если у вас есть только один элемент, вы можете просто адресовать его следующим образом:
var url = builder.Configuration.GetValue<string>("Serilog:WriteTo:0:Args:serverUrl");
Ваш ответ также правильный, но другой человек опередил вас на 20 минут.
Благодарим вас за вклад в сообщество Stack Overflow. Возможно, это правильный ответ, но было бы очень полезно предоставить дополнительные пояснения к вашему коду, чтобы разработчики могли понять ваши рассуждения. Это особенно полезно для новых разработчиков, которые не так хорошо знакомы с синтаксисом или пытаются понять концепции. Не могли бы вы отредактировать свой ответ, включив в него дополнительную информацию на благо сообщества?