Nie jestem pewien, czego tu brakuje, ale nie mogę pobrać wartości z mojego pliku appsettings.json w mojej aplikacji .net core. Mam plik appsettings.json jako:
{
"AppSettings": {
"Version": "One"
}
}
Uruchomienie:
public class Startup
{
private IConfigurationRoot _configuration;
public Startup(IHostingEnvironment env)
{
_configuration = new ConfigurationBuilder()
}
public void ConfigureServices(IServiceCollection services)
{
//Here I setup to read appsettings
services.Configure<AppSettings>(_configuration.GetSection("AppSettings"));
}
}
Model:
public class AppSettings
{
public string Version{ get; set; }
}
Kontroler:
public class HomeController : Controller
{
private readonly AppSettings _mySettings;
public HomeController(IOptions<AppSettings> settings)
{
//This is always null
_mySettings = settings.Value;
}
}
_mySettings
jest zawsze zerowa. Czy jest coś, czego tu brakuje?
c#
asp.net-core
asp.net-core-mvc
mężczyzna
źródło
źródło
Odpowiedzi:
Klasa Program i Startup
.NET Core 2.x
Nie musisz wprowadzać nowego
IConfiguration
wStartup
konstruktorze. Jego implementacja zostanie wstrzyknięta przez system DI..NET Core 1.x
Musisz powiedzieć,
Startup
aby załadować pliki appsettings.Pobieranie wartości
Istnieje wiele sposobów na uzyskanie wartości skonfigurowanej w ustawieniach aplikacji:
ConfigurationBuilder.GetValue<T>
Powiedzmy, że
appsettings.json
wyglądasz tak:Prosta droga
Możesz wstrzyknąć całą konfigurację do konstruktora swojego kontrolera / klasy (przez
IConfiguration
) i uzyskać żądaną wartość za pomocą określonego klucza:Wzorzec opcji
ConfigurationBuilder.GetValue<T>
Działa świetnie, jeśli trzeba tylko jedną lub dwie wartości w ustawieniach aplikacji. Ale jeśli chcesz uzyskać wiele wartości z ustawień aplikacji lub nie chcesz na stałe kodować tych ciągów kluczy w wielu miejscach, łatwiejsze może być użycie wzorca opcji . Wzorzec opcji używa klas do reprezentowania hierarchii / struktury.Aby użyć wzorca opcji:
IOptions<T>
do konstruktora kontrolera / klasy, dla którego chcesz uzyskać wartości1. Zdefiniuj klasy konfiguracyjne reprezentujące strukturę
Możesz zdefiniować klasy z właściwościami, które muszą dokładnie odpowiadać kluczom w ustawieniach aplikacji. Nazwa zajęć nie musi odpowiadać nazwie sekcji w ustawieniach aplikacji:
2. Zarejestruj instancję konfiguracji
Następnie musisz zarejestrować tę instancję konfiguracyjną
ConfigureServices()
podczas uruchamiania:3. Wstrzyknij IOptions
Na koniec na kontrolerze / klasie, dla której chcesz uzyskać wartości, musisz wstrzyknąć
IOptions<AppIdentitySettings>
przez konstruktor:źródło
IOptionsSnapshot<T>
zamiastIOptions<T>
. Możesz rzucić okiem na ten artykuł: offer.solutions/blog/articles/2017/02/17/… . Jednak nie miałem okazji tego spróbować.Po prostu utwórz plik An AnyName.cs i wklej następujący kod.
Musisz zastąpić nazwę pliku YouAppSettingFile.json nazwą pliku.
Twój plik .json powinien wyglądać jak poniżej.
Teraz możesz go używać.
Nie zapomnij dodać odwołania w swojej klasie, w której chcesz użyć.
Kod do pobierania wartości.
źródło
Dodając do odpowiedzi Davida Lianga dla Core 2.0 -
appsettings.json
pliki są połączone zeASPNETCORE_ENVIRONMENT
zmienną.ASPNETCORE_ENVIRONMENT
można ustawić na dowolną wartość, ale trzy wartości są obsługiwane przez ramy:Development
,Staging
, iProduction
. JeśliASPNETCORE_ENVIRONMENT
nie jest ustawiona, domyślnieProduction
.Dla tych trzech wartości te pliki appsettings.ASPNETCORE_ENVIRONMENT.json są obsługiwane po wyjęciu z pudełka -
appsettings.Staging.json
,appsettings.Development.json
iappsettings.Production.json
Powyższe trzy pliki json ustawień aplikacji mogą służyć do konfigurowania wielu środowisk.
Przykład -
appsettings.Staging.json
Służy
Configuration["config_var"]
do pobierania dowolnej wartości konfiguracyjnej.źródło
appsettings.json
+appsettings.{env.EnvironmentName}.json
. W związku z tym stwierdzenie, że ASP.NET Core ładuje tylko pliki appsettings.json do programowania, przemieszczania i produkcji, jest obecnie niepoprawne.ASPNETCORE_ENVIRONMENT
każdym razem? W .Net 4 było o wiele łatwiej. Ci fanatycy JSON naprawdę schrzanili sprawęMyślę, że najprostszym sposobem jest DI. Przykład sięgnięcia do kontrolera.
źródło
services.AddSingleton(Configuration);
, teraz działaW konstruktorze klasy Startup można uzyskać dostęp do pliku appsettings.json i wielu innych ustawień za pomocą wstrzykniętego obiektu IConfiguration:
Startup.cs Konstruktor
Zawartość pliku appsettings.json
źródło
źródło
W moim przypadku było to proste, jak użycie metody Bind () na obiekcie Configuration. Następnie dodaj obiekt jako singleton w DI.
Obiekt instrukcji może być tak złożony, jak chcesz.
źródło
W przypadku ASP.NET Core 3.1 możesz postępować zgodnie z tym przewodnikiem:
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?view=aspnetcore-3.1
Podczas tworzenia nowego projektu ASP.NET Core 3.1 będziesz mieć następujący wiersz konfiguracji
Program.cs
:Umożliwia to:
Oznacza to, że możesz wstrzyknąć
IConfiguration
i pobierać wartości za pomocą klucza ciągu, nawet wartości zagnieżdżone. LubićIConfiguration["Parent:Child"];
Przykład:
appsettings.json
WeatherForecast.cs
źródło
IConfiguration["Parent:Child"]
składni?Myślę, że najlepszą opcją jest:
Utwórz klasę modelu jako schemat konfiguracji
Zarejestruj się w DI: services.Configure (Configuration.GetSection ("democonfig"));
Pobierz wartości jako obiekt modelowy z DI w kontrolerze:
źródło
Z Asp.net core 2.2 do powyżej możesz kodować jak poniżej:
Krok 1. Utwórz plik klasy AppSettings.
Ten plik zawiera metody ułatwiające uzyskanie wartości według klucza z pliku appsettings.json. Wygląda jak kod poniżej:
Krok 2. Wstępna konfiguracja obiektu AppSettings
Musimy zadeklarować i załadować plik appsettings.json podczas uruchamiania aplikacji i załadować informacje konfiguracyjne dla obiektu AppSettings. Wykonamy tę pracę w konstruktorze pliku Startup.cs. Proszę zwrócić uwagę na linię
AppSettings.Instance.SetConfiguration(Configuration);
OK, teraz mam plik appsettings.json z kilkoma kluczami, jak poniżej:
Krok 3. Odczytaj wartość konfiguracyjną z akcji
Robię demo jako akcję w kontrolerze Home, jak poniżej:
A poniżej jest wynik:
Kliknij, aby zobaczyć wynik
Aby uzyskać więcej informacji, możesz odwołać się do artykułu get value from appsettings.json w asp.net core, aby uzyskać bardziej szczegółowy kod.
źródło
To proste: w pliku appsettings.json
W pliku .cs:
źródło