带有列表的.Net Core 2.0配置

时间:2017-11-11 01:13:09

标签: .net asp.net-core asp.net-core-2.0

我正在尝试将一个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; }
}

1 个答案:

答案 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");