Skonfigurowałem moje dane AppSettings w pliku appsettings / Config .json w następujący sposób:
{
"AppSettings": {
"token": "1234"
}
}
Szukałem online, jak odczytać wartości AppSettings z pliku .json, ale nie znalazłem nic przydatnego.
Próbowałem:
var configuration = new Configuration();
var appSettings = configuration.Get("AppSettings"); // null
var token = configuration.Get("token"); // null
Wiem, że dzięki ASP.NET 4.0 możesz to zrobić:
System.Configuration.ConfigurationManager.AppSettings["token"];
Ale jak to zrobić w programie ASP.NET Core?
c#
.net
asp.net-core
.net-core
Oluwafemi
źródło
źródło
Odpowiedzi:
To miało kilka zwrotów akcji. Zmodyfikowałem tę odpowiedź, aby była na bieżąco z ASP.NET Core 2.0 (od 26.02.2018).
Jest to głównie zaczerpnięte z oficjalnej dokumentacji :
Aby pracować z ustawieniami w aplikacji ASP.NET, zaleca się tworzenie instancji tylko
Configuration
wStartup
klasie aplikacji . Następnie użyj wzorca Opcje, aby uzyskać dostęp do poszczególnych ustawień. Powiedzmy, że mamyappsettings.json
plik, który wygląda następująco:I mamy obiekt POCO reprezentujący konfigurację:
Teraz budujemy konfigurację w
Startup.cs
:Pamiętaj, że
appsettings.json
zostanie domyślnie zarejestrowany w .NET Core 2.0. Wappsettings.{Environment}.json
razie potrzeby możemy również zarejestrować plik konfiguracyjny dla każdego środowiska.Jeśli chcemy wprowadzić naszą konfigurację do naszych kontrolerów, będziemy musieli zarejestrować ją w środowisku wykonawczym. Robimy to poprzez
Startup.ConfigureServices
:I wstrzykujemy to w ten sposób:
Pełna
Startup
klasa:źródło
"1.0.0-beta4"
działa na mojej nie"1.0.0-alpha4"
. Wielkie dzięki!Argument 2: cannot convert from 'Microsoft.Extensions.Configuration.IConfigurationSection' to 'System.Action<....Settings>'
Microsoft.Extensions.Options.ConfigurationExtensions
działało zgodnie z oczekiwaniami.Po pierwsze: nazwa zestawu i przestrzeń nazw Microsoft.Framework.ConfigurationModel zmieniły się na Microsoft.Framework.Configuration. Więc powinieneś użyć: np
jako zależność w
project.json
. Użyj wersji beta5 lub 6, jeśli nie masz zainstalowanej wersji 7. Następnie możesz zrobić coś takiego wStartup.cs
.Jeśli następnie chcesz pobrać zmienną z pliku config.json, możesz uzyskać ją od razu, używając:
lub możesz utworzyć klasę o nazwie AppSettings, taką jak ta:
i skonfiguruj takie usługi:
a następnie uzyskać do niego dostęp za pośrednictwem np. kontrolera takiego:
źródło
Configuration.Get<AppSettings>()
do deserializacji całego pliku zamiast określonej sekcji.W przypadku .NET Core 2.0 wszystko się nieco zmieniło. Konstruktor uruchamiania przyjmuje jako parametr obiekt konfiguracji, więc użycie
ConfigurationBuilder
nie jest wymagane. Tu jest moje:Mój POCO to
StorageOptions
obiekt wymieniony na górze:Konfiguracja jest tak naprawdę podsekcją mojego
appsettings.json
pliku o nazwieAzureStorageConfig
:Jedyne, co dodam, to to, że odkąd konstruktor się zmienił, nie testowałem, czy trzeba zrobić coś dodatkowego, aby można go było załadować
appsettings.<environmentname>.json
w przeciwieństwie do tegoappsettings.json
.źródło
public HomeController(IOptions<StorageOptions> settings)
, otrzymuję następujący komunikat o błędzie: Typy złożone związane z modelem nie mogą być abstrakcyjne lub typu wartości i muszą mieć konstruktor bez parametrów.Z .NET Core 2.2 i w najprostszy możliwy sposób ...
appsettings.json
jest automatycznie ładowany i dostępny za pośrednictwem konstruktora lub wstrzyknięcia akcji, a takżeGetSection
metodaIConfiguration
. Nie ma potrzeby zmieniaćStartup.cs
aniProgram.cs
jeśli potrzebujesz tylkoappsettings.json
.źródło
var myValue = config["MyKey"]
Jeśli chcesz tylko uzyskać wartość tokena, użyj
Configuration["AppSettings:token"]
źródło
.NET Core 3.0
Może nie jest to najlepszy sposób na uzyskanie wartości z pliku appsettings.json , ale jest prosty i działa w mojej aplikacji !!
Plik appsettings.json
Kontroler:
Na górze :
W twoim kodzie:
źródło
Poniższe działa w przypadku aplikacji konsolowych;
Zainstaluj następujące pakiety NuGet (
.csproj
);Utwórz
appsettings.json
na poziomie katalogu głównego. Kliknij go prawym przyciskiem myszy i wybierz „Kopiuj do katalogu wyjściowego” jako „ Kopiuj, jeśli nowszy ”.Przykładowy plik konfiguracyjny:
Program.cs
configurationSection.Key
iconfigurationSection.Value
będzie miał właściwości konfiguracyjne.źródło
W przypadku .NET Core 2.0 możesz po prostu:
Zadeklaruj pary klucz / wartość w appsettings.json:
Wstrzyknij usługę konfiguracyjną do startup.cs i uzyskaj wartość za pomocą usługi
źródło
Wątpię, czy to dobra praktyka, ale działa lokalnie. Zaktualizuję to, jeśli zakończy się niepowodzeniem podczas publikowania / wdrażania (w usłudze sieci Web IIS).
Krok 1 - Dodaj ten zestaw na początek swojej klasy (w moim przypadku klasa kontrolera):
Krok 2 - Dodaj to lub coś podobnego:
Krok 3 - Wywołaj wartość klucza, wykonując to (zwraca ciąg znaków):
źródło
appsettings.json
znajduje się we właściwym kataloguTylko w celu uzupełnienia odpowiedzi Yuval Itzchakov.
Możesz załadować konfigurację bez funkcji konstruktora, możesz ją po prostu wstrzyknąć.
źródło
W uzupełnieniu do istniejących odpowiedzi chciałbym wspomnieć, że czasami może to być przydatne metody rozszerzenie dla
IConfiguration
dla uproszczenia.Trzymam konfigurację JWT w appsettings.json, więc moja klasa metod rozszerzeń wygląda następująco:
Oszczędza to dużo linii i piszesz czysty i minimalny kod:
Można również zarejestrować
IConfiguration
instancję jako singleton i wstrzyknąć ją tam, gdzie potrzebujesz - używam kontenera Autofac, oto jak to zrobić:Możesz zrobić to samo z MS Dependency Injection:
źródło
Oto pełny przypadek użycia programu ASP.NET Core!
artykuły.json
ArticleContainer.cs
Startup.cs
Index.cshtml.cs
Index.cshtml.cs
źródło
Po prostu ciągle coś zmieniają - właśnie zaktualizowali Visual Studio i mieli bombę całego projektu, w drodze do powrotu do zdrowia, a nowy sposób wygląda następująco:
Ciągle tęsknię za tą linią!
źródło
They just keep changing things
. To. Prawie każda odpowiedź na tej stronie dotyczy tylko określonej wersji .Net Core..NET Core 2.1.0
3. Zainstaluj następujące zależności:
4. WAŻNE: kliknij prawym przyciskiem myszy plik appsettings.json -> kliknij Właściwości -> wybierz Kopiuj, jeśli nowszy:
Wreszcie możesz wykonać:
config [„key1”]
Biorąc pod uwagę, że mój plik konfiguracyjny będzie wyglądał następująco:
źródło
Możesz spróbować poniżej kodu. To działa dla mnie.
Tutaj utworzyłem jedną klasę, aby uzyskać parametry połączenia i ustawienia aplikacji.
I Plik Startup.cs musisz zarejestrować klasę jak poniżej.
źródło
W przypadku ASP.NET Core 3.1 możesz postępować zgodnie z tą dokumentacją:
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 wstrzykiwać
IConfiguration
i pobierać wartości za pomocą klucza łańcuchowego, nawet wartości zagnieżdżonych. LubićIConfiguration ["Parent:Child"];
Przykład:
appsettings.json
WeatherForecast.cs
źródło
Czy to było „oszustwo”? Właśnie ustawiłem moją konfigurację w klasie Startup na statyczną, a następnie mogę uzyskać do niej dostęp z dowolnego miejsca:
źródło
Pobierz go do kontrolera jako obiekt przez wywołanie
Get<YourType>()
:źródło
Najpierw należy wstrzyknąć IConfigurację, a następnie w celu odczytu z ustawień można użyć jednej z następujących metod:
Uzyskaj dane sekcji
Uzyskaj wartość w ramach sekcji
Uzyskaj wartość zagnieżdżoną w sekcji
źródło
Sposób .NET Core 2.2
(Bez wątpienia Microsoft zmieni to ponownie na coś zupełnie innego w następnej wersji .NET.)
1. appSettings.json
Może to wyglądać mniej więcej tak. Tutaj załadujemy ustawienie 1 i ustawienie 2
2) AppSettings.cs
POCO klasy trzymać Setting1 i Setting2. Będziemy ładować plik appsettings.json do tego obiektu klasy. Struktura klasy POCO powinna pasować do pliku JSON, w razie potrzeby właściwości mogą być zagnieżdżone w innych właściwościach / klasach.
3 Startup.cs
Załaduj appSettings.json do swojego obiektu AppSettings i zacznij go używać:
źródło
Dzięki najnowszej wersji Netcoreapp 3.1 możesz to zrobić po prostu bez żadnych zależności od stron trzecich.
I stworzył istotę za to , ale można użyć tej klasy do odczytu pliku JSON i powrócić właściwości dynamicznych.
Zrobiłem to specjalnie, aby móc użyć appconfig.json w mojej aplikacji konsolowej dotnet. Po prostu wstawiłem to do mojej
Program.Main
funkcji:A to zwróci
dynamic
obiekt dla właściwości. (JsonElement, jeśli nie jest prymitywny). Mójappsettings.json
plik wygląda następująco:źródło