2017-05-15 81 views
5

Mam plik appsettings.json, który wygląda tak:ASP.NET Rdzeń: JSON Konfiguracja GetSection zwraca null

{ 
    "MyConfig": { 
     "ConfigA": "value", 
     "ConfigB": "value" 
    } 
} 

w moim Startup.cs buduję mój IConfiguration:

public ConfigurationRoot Configuration { get; set; } 

public Startup(ILoggerFactory loggerFactory, IHostingEnvironment environment) 
{ 
     var builder = new ConfigurationBuilder() 
        .SetBasePath(environment.ContentRootPath) 
        .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)        
        .AddEnvironmentVariables(); 

     Configuration = builder.Build(); 
} 

public void ConfigureServices(IServiceCollection services) 
{ 
     //GetSection returns null... 
     services.Configure<MyConfig>(Configuration.GetSection("MyConfig")); 
} 

Ale Configuration.GetSection("MyConfig") zawsze zwraca null, chociaż wartość istnieje w moim pliku JSON. Configuration.GetSection("MyConfig:ConfigA") działa dobrze.

Co robię źle?

+2

Mam ten sam problem, masz jakieś rozwiązanie? –

Odpowiedz

-2

OK, więc jest w porządku, że Configuration.GetSection("MyConfig").Value zwraca null. Mój problem polegał na tym, że zależność I wstrzyknięto w klasę, która nie była Controller.

Teraz I DI do Controller i po prostu przekazać ustawienia jako argument. Prace.

+3

Dlaczego warto mieć zerową wartość? Nawet w pliku Startup.cs Configuration.GetSection ("Mail") zwraca null; – freddoo

+0

Zrozumiałam, że w Startup.cs można uzyskać tylko "liście" konfiguracji json, inaczej niż w rdzeniu .net 1 i tak i używać takiego kodu: services_.Configure (options_ => {options_.Name = Configuration.GetValue ("Corporate: Name"); options_.BrandLogo = Configuration.GetValue ("Corporate: BrandLogo");}); –