c# - tutorial - ASP.NET Core Holen Sie sich Json Array mit IConfiguration




dotnet core 2 asp net (7)

Dies funktionierte für mich, um ein Array von Zeichenfolgen aus meiner Konfiguration zurückzugeben:

var allowedMethods = Configuration.GetSection("AppSettings:CORS-Settings:Allow-Methods")
    .Get<string[]>();

Mein Konfigurationsabschnitt sieht folgendermaßen aus:

"AppSettings": {
    "CORS-Settings": {
        "Allow-Origins": [ "http://localhost:8000" ],
        "Allow-Methods": [ "OPTIONS","GET","HEAD","POST","PUT","DELETE" ]
    }
}

https://code.i-harness.com

In appsettings.json

{
      "MyArray": [
          "str1",
          "str2",
          "str3"
      ]
}

In Startup.cs

public void ConfigureServices(IServiceCollection services)
{
     services.AddSingleton<IConfiguration>(Configuration);
}

In HomeController

public class HomeController : Controller
{
    private readonly IConfiguration _config;
    public HomeController(IConfiguration config)
    {
        this._config = config;
    }

    public IActionResult Index()
    {
        return Json(_config.GetSection("MyArray"));
    }
}

Es gibt meine Codes oben, ich habe null Wie bekomme ich das Array?


Eine Art alte Frage, aber ich kann eine für .NET Core 2.1 mit C # 7-Standards aktualisierte Antwort geben. Angenommen, ich habe eine Auflistung nur in appsettings.Development.json, z. B .:

"TestUsers": [
{
  "UserName": "TestUser",
  "Email": "[email protected]",
  "Password": "[email protected]!"
},
{
  "UserName": "TestUser2",
  "Email": "[email protected]",
  "Password": "[email protected]!"
}],

],

Ich kann sie überall extrahieren, wo die Microsoft.Extensions.Configuration.IConfiguration implementiert und verdrahtet ist:

public dynamic GetTestUsers()
{
    var testUsers = Configuration.GetSection("TestUsers")
                    .GetChildren()
                    .ToList()
                    .Select(x => new {
                        UserName = x.GetValue<string>("UserName"),
                        Email = x.GetValue<string>("Email"),
                        Password = x.GetValue<string>("Password")
                    });

    return new { Data = testUsers };
}

Jetzt habe ich eine Liste von gut typisierten Objekten, die gut typisiert sind. Wenn ich testUsers.First () gehe, sollte Visual Studio jetzt Optionen für 'Benutzername', 'E-Mail' und 'Passwort' anzeigen.


Für den Fall, dass ein Array komplexer JSON-Objekte aus der Konfiguration zurückgegeben wird, habe ich die Antwort von @ djangojazz so angepasst, dass anonyme Typen und dynamische statt Tupel verwendet werden.

Angesichts eines Einstellungsbereichs von:

"TestUsers": [
{
  "UserName": "TestUser",
  "Email": "[email protected]",
  "Password": "[email protected]!"
},
{
  "UserName": "TestUser2",
  "Email": "[email protected]",
  "Password": "[email protected]!"
}

Sie können das Objektarray folgendermaßen zurückgeben:

var testUsers = Configuration.GetSection("TestUsers")
   .GetChildren()
   .ToList()
    //Named tuple returns, new in C# 7
   .Select(x => 
         (
          x.GetValue<string>("UserName"), 
          x.GetValue<string>("Email"), 
          x.GetValue<string>("Password")
          )
    )
    .ToList<(string UserName, string Email, string Password)>();

In ASP.NET Core 2.2 und höher können wir die IConfiguration an einer beliebigen Stelle in unserer Anwendung einfügen, wie in Ihrem Fall. Sie können die IConfiguration in HomeController einfügen und auf diese Weise das Array abrufen.

 string[] array = _config.GetSection("MyArray").Get<string[]>(); 

Sie können das Array direkt abrufen, ohne eine neue Ebene in der Konfiguration zu erhöhen:

public void ConfigureServices(IServiceCollection services) {
    services.Configure<List<String>>(Configuration.GetSection("MyArray"));
    //...
}

Sie können die folgenden zwei NuGet-Pakete installieren:

Microsoft.Extensions.Configuration    
Microsoft.Extensions.Configuration.Binder

Und dann haben Sie die Möglichkeit, die folgende Erweiterungsmethode zu verwenden:

var myArray = _config.GetSection("MyArray").Get<string[]>();

Wenn Sie ein Array komplexer JSON-Objekte wie dieses haben:

{
  "MySettings": {
    "MyValues": [
      { "Key": "Key1", "Value":  "Value1" },
      { "Key": "Key2", "Value":  "Value2" }
    ]
  }
}

Sie können die Einstellungen folgendermaßen abrufen:

var valuesSection = configuration.GetSection("MySettings:MyValues");
foreach (IConfigurationSection section in valuesSection.GetChildren())
{
    var key = section.GetValue<string>("Key");
    var value = section.GetValue<string>("Value");
}




asp.net-core-mvc