Ich habe meine AppSettings-Daten in der Datei appsettings / Config .json folgendermaßen eingerichtet:
{
"AppSettings": {
"token": "1234"
}
}
Ich habe online gesucht, wie AppSettings-Werte aus der JSON-Datei gelesen werden können, konnte aber nichts Nützliches finden.
Ich habe es versucht:
var configuration = new Configuration();
var appSettings = configuration.Get("AppSettings"); // null
var token = configuration.Get("token"); // null
Ich weiß, dass Sie mit ASP.NET 4.0 Folgendes tun können:
System.Configuration.ConfigurationManager.AppSettings["token"];
Aber wie mache ich das in ASP.NET Core?
c#
.net
asp.net-core
.net-core
Oluwafemi
quelle
quelle
Antworten:
Dies hat ein paar Drehungen und Wendungen gehabt. Ich habe diese Antwort so geändert, dass sie mit ASP.NET Core 2.0 (Stand: 26/02/2018) auf dem neuesten Stand ist.
Dies ist meistens der offiziellen Dokumentation entnommen :
Um mit Einstellungen in Ihrer ASP.NET-Anwendung zu arbeiten, wird empfohlen, nur a
Configuration
in derStartup
Klasse Ihrer Anwendung zu instanziieren . Verwenden Sie dann das Optionsmuster, um auf einzelne Einstellungen zuzugreifen. Nehmen wir an, wir haben eineappsettings.json
Datei, die so aussieht:Und wir haben ein POCO-Objekt, das die Konfiguration darstellt:
Jetzt bauen wir die Konfiguration in
Startup.cs
:Beachten Sie, dass
appsettings.json
dies standardmäßig in .NET Core 2.0 registriert wird . Bei Bedarf können wir auch eineappsettings.{Environment}.json
Konfigurationsdatei pro Umgebung registrieren .Wenn wir unsere Konfiguration in unsere Controller einfügen möchten, müssen wir sie bei der Laufzeit registrieren. Wir tun dies über
Startup.ConfigureServices
:Und wir injizieren es so:
Die ganze
Startup
Klasse:quelle
"1.0.0-beta4"
funktioniert bei mir nicht"1.0.0-alpha4"
. Vielen Dank!Argument 2: cannot convert from 'Microsoft.Extensions.Configuration.IConfigurationSection' to 'System.Action<....Settings>'
Microsoft.Extensions.Options.ConfigurationExtensions
es wie erwartet.Zunächst einmal: Der Assemblyname und der Namespace von Microsoft.Framework.ConfigurationModel wurden in Microsoft.Framework.Configuration geändert. Sie sollten also verwenden: z
als Abhängigkeit in
project.json
. Verwenden Sie Beta5 oder 6, wenn Sie 7 nicht installiert haben. Dann können Sie so etwas in tunStartup.cs
.Wenn Sie dann eine Variable aus der Datei config.json abrufen möchten, können Sie sie sofort abrufen, indem Sie:
oder Sie können eine Klasse namens AppSettings wie folgt erstellen:
und konfigurieren Sie die Dienste wie folgt:
und dann über zB einen Controller wie diesen darauf zugreifen:
quelle
Configuration.Get<AppSettings>()
um die gesamte Datei anstelle eines bestimmten Abschnitts zu deserialisieren.Für .NET Core 2.0 haben sich die Dinge ein wenig geändert. Der Startkonstruktor verwendet ein Konfigurationsobjekt als Parameter. Daher ist die Verwendung von
ConfigurationBuilder
nicht erforderlich. Hier ist mein:Mein POCO ist das oben
StorageOptions
erwähnte Objekt:Und die Konfiguration ist eigentlich ein Unterabschnitt meiner
appsettings.json
Datei mit dem NamenAzureStorageConfig
:Das einzige, was ich hinzufügen möchte, ist, dass ich, da sich der Konstruktor geändert hat, nicht getestet habe, ob etwas zusätzliches getan werden muss, damit er geladen wird
appsettings.<environmentname>.json
im Gegensatz zuappsettings.json
.quelle
public HomeController(IOptions<StorageOptions> settings)
, wird folgende Fehlermeldung angezeigt: Modellgebundene komplexe Typen dürfen keine abstrakten oder Werttypen sein und müssen einen parameterlosen Konstruktor haben.Mit .NET Core 2.2 und auf einfachste Weise ...
appsettings.json
wird automatisch geladen und ist entweder über den Konstruktor oder die Aktionsinjektion verfügbar, und es gibt auch eineGetSection
MethodeIConfiguration
. Es besteht keine Notwendigkeit zu ändernStartup.cs
oderProgram.cs
wenn alles, was Sie brauchen, istappsettings.json
.quelle
var myValue = config["MyKey"]
Wenn Sie nur den Wert des Tokens erhalten möchten, verwenden Sie
Configuration["AppSettings:token"]
quelle
.NET Core 3.0
Vielleicht ist es nicht der beste Weg, einen Wert von appsettings.json zu erhalten , aber es ist einfach und funktioniert in meiner Anwendung !!
Datei appsettings.json
Regler:
Oben :
In Ihrem Code:
quelle
Das Folgende funktioniert für Konsolenanwendungen.
Installieren Sie die folgenden NuGet-Pakete (
.csproj
);appsettings.json
Auf Stammebene erstellen . Klicken Sie mit der rechten Maustaste darauf und "In Ausgabeverzeichnis kopieren" als " Bei neuerer Version kopieren ".Beispielkonfigurationsdatei:
Program.cs
configurationSection.Key
undconfigurationSection.Value
wird Konfigurationseigenschaften haben.quelle
Für .NET Core 2.0 können Sie einfach:
Deklarieren Sie Ihre Schlüssel / Wert-Paare in appsettings.json:
Fügen Sie den Konfigurationsdienst in startup.cs ein und rufen Sie den Wert mithilfe des Dienstes ab
quelle
Ich bezweifle, dass dies eine gute Praxis ist, aber sie funktioniert vor Ort. Ich werde dies aktualisieren, wenn es beim Veröffentlichen / Bereitstellen (auf einem IIS-Webdienst) fehlschlägt.
Schritt 1 - Fügen Sie diese Assembly oben in Ihrer Klasse hinzu (in meinem Fall Controller-Klasse):
Schritt 2 - Fügen Sie dies oder etwas Ähnliches hinzu:
Schritt 3 - Rufen Sie dazu den Wert Ihres Schlüssels auf (gibt eine Zeichenfolge zurück):
quelle
appsettings.json
ist im richtigen VerzeichnisNur um die Antwort von Yuval Itzchakov zu ergänzen.
Sie können die Konfiguration ohne Builder-Funktion laden, Sie können sie einfach einfügen.
quelle
Zusätzlich zu den vorhandenen Antworten möchte ich erwähnen, dass es manchmal nützlich sein kann, Erweiterungsmethoden für zu haben
IConfiguration
willen der Einfachheit halber.Ich behalte die JWT-Konfiguration in appsettings.json bei, sodass meine Klasse für Erweiterungsmethoden wie folgt aussieht:
Es spart Ihnen viele Zeilen und Sie schreiben einfach sauberen und minimalen Code:
Es ist auch möglich, eine
IConfiguration
Instanz als Singleton zu registrieren und sie zu injizieren, wo immer Sie sie benötigen. Ich verwende den Autofac-Container folgendermaßen:Mit MS Dependency Injection können Sie dasselbe tun:
quelle
Hier ist der vollständige Anwendungsfall für ASP.NET Core!
articles.json
ArticleContainer.cs
Startup.cs
Index.cshtml.cs
Index.cshtml.cs
quelle
Sie ändern einfach ständig Dinge - nachdem sie gerade Visual Studio aktualisiert haben und die gesamte Projektbombe auf dem Weg zur Wiederherstellung hatten, sieht der neue Weg folgendermaßen aus:
Ich habe diese Zeile immer wieder verpasst!
quelle
They just keep changing things
. Dies. Fast jede Antwort auf dieser Seite gilt nur für eine bestimmte Version von .Net Core..NET Core 2.1.0
3. Installieren Sie die folgenden Abhängigkeiten:
4. Dann WICHTIG: Klicken Sie mit der rechten Maustaste auf die Datei appsettings.json -> klicken Sie auf Eigenschaften -> wählen Sie Kopieren, falls neuer:
Schließlich können Sie Folgendes tun:
config ["key1"]
In Anbetracht dessen, dass meine Konfigurationsdatei folgendermaßen aussehen wird:
quelle
Sie können den folgenden Code ausprobieren. Das funktioniert bei mir.
Hier habe ich eine Klasse erstellt, um die Verbindungszeichenfolge und die App-Einstellungen abzurufen.
In der Datei Startup.cs müssen Sie die Klasse wie folgt registrieren.
quelle
Für ASP.NET Core 3.1 können Sie dieser Dokumentation folgen:
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?view=aspnetcore-3.1
Wenn Sie ein neues ASP.NET Core 3.1-Projekt erstellen, wird die folgende Konfigurationszeile angezeigt
Program.cs
:Dies ermöglicht Folgendes:
Dies bedeutet, dass Sie
IConfiguration
Werte mit einem Zeichenfolgenschlüssel einfügen und abrufen können, auch verschachtelte Werte. MögenIConfiguration ["Parent:Child"];
Beispiel:
appsettings.json
WeatherForecast.cs
quelle
War das "Betrug"? Ich habe gerade meine Konfiguration in der Startup-Klasse statisch gemacht und kann dann von überall darauf zugreifen:
quelle
Holen Sie es in Controller als Objekt per Aufruf
Get<YourType>()
:quelle
Zuerst sollten Sie IConfiguration injizieren und dann zum Lesen aus Appsettings eine der folgenden Methoden verwenden:
Abschnittsdaten abrufen
Holen Sie sich einen Wert innerhalb eines Abschnitts
Verschachtelten Wert innerhalb des Abschnitts abrufen
quelle
Der .NET Core 2.2 Weg
(Ohne Zweifel wird Microsoft es in der nächsten .NET-Version wieder in etwas völlig anderes ändern.)
1. appSettings.json
Es könnte ungefähr so aussehen. Hier laden wir Setting1 und Setting2
2. AppSettings.cs
Die POCO- Klasse für Setting1 und Setting2. Wir werden die Datei appsettings.json in dieses Klassenobjekt laden. Die Struktur der POCO-Klasse sollte mit der JSON-Datei übereinstimmen. Eigenschaften können bei Bedarf in anderen Eigenschaften / Klassen verschachtelt sein.
3 Startup.cs
Laden Sie appSettings.json in Ihr AppSettings-Objekt und verwenden Sie es:
quelle
Mit der neuesten Version von netcoreapp 3.1 können Sie dies ganz einfach ohne Abhängigkeiten von Drittanbietern tun.
Ich habe eine Übersicht dafür erstellt , aber Sie können diese Klasse verwenden, um eine JSON-Datei zu lesen und dynamische Eigenschaften zurückzugeben.
Ich habe dies speziell gemacht, damit ich eine appconfig.json in meiner Dotnet-Konsolenanwendung verwenden kann. Ich habe dies einfach in meine
Program.Main
Funktion aufgenommen:Und dies gibt ein
dynamic
Objekt für die Eigenschaft zurück. (Ein JsonElement, wenn es kein Grundelement ist). Meineappsettings.json
Datei sieht folgendermaßen aus:quelle