Ich bin mir nicht sicher, was ich hier vermisse, aber ich kann die Werte aus meiner appsettings.json in meiner .net-Kernanwendung nicht abrufen. Ich habe meine appsettings.json als:
{
"AppSettings": {
"Version": "One"
}
}
Anfang:
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"));
}
}
Modell:
public class AppSettings
{
public string Version{ get; set; }
}
Regler:
public class HomeController : Controller
{
private readonly AppSettings _mySettings;
public HomeController(IOptions<AppSettings> settings)
{
//This is always null
_mySettings = settings.Value;
}
}
_mySettings
ist immer null. Fehlt mir hier etwas?
c#
asp.net-core
asp.net-core-mvc
ein Mann
quelle
quelle
Antworten:
Programm- und Startklasse
.NET Core 2.x.
Sie müssen
IConfiguration
imStartup
Konstruktor nicht neu sein. Seine Implementierung wird vom DI-System injiziert..NET Core 1.x.
Sie müssen
Startup
angeben , dass die Appsettings-Dateien geladen werden sollen.Werte bekommen
Es gibt viele Möglichkeiten, den von Ihnen konfigurierten Wert aus den App-Einstellungen abzurufen:
ConfigurationBuilder.GetValue<T>
Nehmen wir an, Sie sehen so
appsettings.json
aus:Einfacher Weg
Sie können die gesamte Konfiguration (via
IConfiguration
) in den Konstruktor Ihres Controllers / Ihrer Klasse einfügen und mit einem angegebenen Schlüssel den gewünschten Wert erhalten:Optionsmuster
Das
ConfigurationBuilder.GetValue<T>
funktioniert hervorragend, wenn Sie nur einen oder zwei Werte aus den App-Einstellungen benötigen. Wenn Sie jedoch mehrere Werte aus den App-Einstellungen abrufen oder diese Schlüsselzeichenfolgen nicht an mehreren Stellen fest codieren möchten, ist es möglicherweise einfacher, das Optionsmuster zu verwenden . Das Optionsmuster verwendet Klassen, um die Hierarchie / Struktur darzustellen.So verwenden Sie das Optionsmuster:
IOptions<T>
in den Konstruktor des Controllers / der Klasse, für die Sie Werte erhalten möchten1. Definieren Sie Konfigurationsklassen, um die Struktur darzustellen
Sie können Klassen mit Eigenschaften definieren, die genau mit den Schlüsseln in Ihren App-Einstellungen übereinstimmen müssen . Der Name der Klasse muss nicht mit dem Namen des Abschnitts in den App-Einstellungen übereinstimmen:
2. Registrieren Sie die Konfigurationsinstanz
Und dann müssen Sie diese Konfigurationsinstanz
ConfigureServices()
beim Start registrieren :3. Injizieren Sie IOptions
Zuletzt müssen Sie auf dem Controller / der Klasse, auf der Sie die Werte erhalten möchten, über den
IOptions<AppIdentitySettings>
Konstruktor injizieren :quelle
IOptionsSnapshot<T>
stattdessen verwendenIOptions<T>
. Sie können sich diesen Artikel ansehen: issue.solutions/blog/articles/2017/02/17/… . Ich hatte jedoch keine Gelegenheit, es selbst zu versuchen.Erstellen Sie einfach eine AnyName.cs-Datei und fügen Sie den folgenden Code ein.
Der Dateiname YouAppSettingFile.json muss durch Ihren Dateinamen ersetzt werden.
Ihre .json-Datei sollte wie folgt aussehen.
Jetzt können Sie es verwenden.
Vergessen Sie nicht, Referenz in Ihrer Klasse hinzuzufügen, in der Sie verwenden möchten.
Code zum Abrufen des Werts.
quelle
Hinzufügen zu David Liangs Antwort für Core 2.0 -
appsettings.json
Dateien sind mitASPNETCORE_ENVIRONMENT
Variablen verknüpft .ASPNETCORE_ENVIRONMENT
kann auf einen beliebigen Wert eingestellt werden, aber drei Werte werden vom Framework unterstützt:Development
,Staging
, undProduction
. WennASPNETCORE_ENVIRONMENT
nicht festgelegt, wird standardmäßig aufProduction
.Für diese drei Werte werden die Dateien appsettings.ASPNETCORE_ENVIRONMENT.json sofort unterstützt -
appsettings.Staging.json
,appsettings.Development.json
undappsettings.Production.json
Die oben genannten drei JSON-Dateien mit Anwendungseinstellungen können zum Konfigurieren mehrerer Umgebungen verwendet werden.
Beispiel -
appsettings.Staging.json
Verwenden Sie
Configuration["config_var"]
diese Option , um einen beliebigen Konfigurationswert abzurufen.quelle
appsettings.json
+appsettings.{env.EnvironmentName}.json
. Daher ist die Aussage, dass ASP.NET Core nur die Entwicklungs-, Staging- und Produktionsdateien appsettings.json lädt, derzeit falsch.ASPNETCORE_ENVIRONMENT
jedes Mal die Windows-Variable festlegen ? In .Net 4 war es viel einfacher. Diese JSON-Fanatiker haben es sehr vermasseltIch denke, der einfachste Weg ist von DI. Ein Beispiel für das Erreichen von Controller.
quelle
services.AddSingleton(Configuration);
, jetzt funktioniert esIm Konstruktor der Startup-Klasse können Sie mit dem injizierten IConfiguration-Objekt auf appsettings.json und viele andere Einstellungen zugreifen:
Startup.cs Konstruktor
Inhalt von appsettings.json
quelle
quelle
In meinem Fall war es einfach, die Bind () -Methode für das Konfigurationsobjekt zu verwenden. Fügen Sie dann das Objekt als Singleton in den DI ein.
Das Anweisungsobjekt kann so komplex sein, wie Sie möchten.
quelle
Für ASP.NET Core 3.1 können Sie dieser Anleitung 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
IConfiguration["Parent:Child"]
Syntax erfahren ?Ich denke, die beste Option ist:
Erstellen Sie eine Modellklasse als Konfigurationsschema
Registrieren Sie sich in DI: services.Configure (Configuration.GetSection ("democonfig"));
Rufen Sie die Werte als Modellobjekt von DI in Ihrem Controller ab:
quelle
Von Asp.net Core 2.2 bis oben können Sie wie folgt codieren:
Schritt 1. Erstellen Sie eine AppSettings-Klassendatei.
Diese Datei enthält einige Methoden, mit denen Sie den Wert anhand des Schlüssels aus der Datei appsettings.json ermitteln können. Sehen Sie wie folgt aus:
Schritt 2. Erstkonfiguration für das AppSettings-Objekt
Wir müssen die Datei appsettings.json deklarieren und laden, wenn die Anwendung gestartet wird, und Konfigurationsinformationen für das AppSettings-Objekt laden. Wir werden diese Arbeit im Konstruktor der Datei Startup.cs ausführen. Bitte beachten Sie die Zeile
AppSettings.Instance.SetConfiguration(Configuration);
Okay, jetzt habe ich eine appsettings.json-Datei mit einigen Schlüsseln wie folgt:
Schritt 3. Lesen Sie den Konfigurationswert aus einer Aktion
Ich mache Demo eine Aktion in Home Controller wie folgt:
Und unten ist das Ergebnis:
Klicken Sie hier, um das Ergebnis anzuzeigen
Weitere Informationen finden Sie im Artikel get value from appsettings.json im asp.net-Kern, um detaillierteren Code zu erhalten.
quelle