![](/img/trans.png)
[英]Configuration.GetSection gets value from appsetting.json but Configuration.GetSection.Bind always returns null
[英]Configuration.GetSection() easily gets primitive string values but not complex values
這真讓我驚訝。 我正在使用Configuration.GetSection
方法從appsettings.json中讀取值,並且簡而言之,我的appsettings.json如下所示:
"AppSettings":
{
"PathPrefix": "",
"Something": "Something else",
"Clients":{"foo": "bar"}
}
現在令我驚訝的是,如果我執行以下操作:
var foo = Configuration.GetSection("AppSettings:Clients:foo").Value;
然后,它正確獲取值。 它獲得價值bar
但是,當我這樣做
var clients = Configuration.GetSection("AppSettings:Clients").Value;
它返回null。 不僅是這個字段,每當我調用getSection
方法來獲取任何復雜對象時,它都將返回null,但是當我調用它以獲取基本字符串值時, 即使看似我仍然可以正確地獲取該值,但在獲取其父元素時遇到了問題。 這讓我感到困惑,並提出了三個問題:
您可以使用強類型對象加載整個對象。
首先,創建一個或多個類來保存您的設置。 根據您的示例,它看起來像:
public class AppSettings
{
public string PathPrefix { get; set; }
public string Something { get; set; }
public Clients Clients { get; set; }
}
public class Clients
{
public string foo { get; set; }
}
現在,您需要將“選項”服務添加到服務集合中,並從配置中加載設置:
public void ConfigureServices(IServiceCollection services)
{
// This is only required for .NET Core 2.0
services.AddOptions();
services.Configure<AppSettings>(Configuration.GetSection("AppSettings"));
services.AddMvc();
}
現在,您可以通過將屬性注入到類中來訪問屬性,例如:
public class HomeController : Controller
{
private readonly AppSettings _settings;
public HomeController(IOptions<AppSettings> settings)
{
_settings = settings.Value;
}
}
您還可以通過指定要加載的配置節來在ConfigureService
方法中加載子選項。
services.Configure<Clients>(Configuration.GetSection("AppSettings:Clients");
現在,您可以注入IOptions<Clients>
來訪問那些設置
官方文檔可以在這里找到
您希望它返回什么? 您可以使用Get<T>
擴展方法獲取復雜的對象。 嘗試這個:
var clients = Configuration.GetSection("AppSettings:Clients").Get<YourClientsType>();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.