我正在尝试将一个id列表绑定到一个设置,当我使用bind时它会起作用,但是用GetValue检索它是行不通的。这有效:
var authenticationSettings = new Authentication();
this.Configuration.GetSection("Authentication").Bind(authenticationSettings);
var clients = authenticationSettings.AuthorizedApplications;
这不是:
var authenticationSettings = this.Configuration.GetValue<Authentication>("Authentication");
这不起作用
var clients = this.Configuration.GetValue<List<string>>("Authentication:AuthorizedApplications");
这是我的配置类:
public class Authentication
{
public List<string> AuthorizedApplications { get; set; }
}
答案 0 :(得分:1)
查看有关configuration in ASP.NET Core的文章:
GetValue适用于简单场景,不会绑定到整个场景 部分。 GetValue从GetSection(key)获取标量值。值 转换为特定类型。
这就是为什么你应该使用Bind()
扩展方法,它提供了将整个配置部分绑定到强类型c#对象的功能。
前段时间我开发了以下扩展方法,允许在一行代码中获取一个部分:
public static class ConfigurationExtensions
{
public static T GetSectionValue<T>(this IConfiguration configuration, string sectionName) where T : new()
{
var val = new T();
configuration.GetSection(sectionName).Bind(val);
return val;
}
}
var authenticationSettings = Configuration.GetSectionValue<Authentication>("Authentication");
var listValue = Configuration.GetSectionValue<List<string>>("Authentication:AuthorizedApplications");