Heim  >  Artikel  >  Backend-Entwicklung  >  Eine Erklärung, wie .NetCore Konfigurationsinformationen in Json- und XML-Formaten erhält

Eine Erklärung, wie .NetCore Konfigurationsinformationen in Json- und XML-Formaten erhält

巴扎黑
巴扎黑Original
2017-09-20 09:36:003659Durchsuche

In diesem Artikel erfahren Sie, wie Sie Konfigurationsinformationen in Json erhalten. Werfen wir einen Blick darauf.

Was ich in diesem Artikel mit Ihnen teilen werde, ist: Wie Sie Konfigurationsinformationen in Json erhalten und wie Sie Konfigurationsinformationen erhalten Die Datei appsettings.json, daher habe ich den Testpunkt auf die Konsolenanwendung von Netcore gesetzt. Die Verwendung von Konfigurationsdateien auf der Konsole ist ebenfalls üblich. Die offiziellen Website-Beispiele erläutern hauptsächlich das JSON-Format und bringen direkt das XML-Format. Deshalb teile ich diesen Artikel und hoffe, er kann Ihnen helfen >

    XML-Knotenattributwert abrufen
  1. Kann die Konfigurationsdatei nicht zusammen mit der Anwendung platziert werden? Die Antwort lautet „Ja“.
  2. Für die Netstandard-Erweiterung gibt es eine Konfigurationsdatei-Informationsoperationsklasse. Da die Webanwendung und die Konsolenanwendung von Core vereinheitlicht sind, werden die Testfälle unten in der Konsolenanwendung erläutert auch für Webanwendungen verwendet werden;

  3. Zunächst müssen wir in der Konsolenanwendung auf das folgende Nuget-Paket verweisen (mein Test basiert hier auf 2.0):

Json-Konfigurationsinformationen abrufen

Um die JSON-Konfiguration zu erhalten, müssen wir zusätzlich zu den beiden oben genannten Referenzen auch Folgendes zitieren:


 Install-Package Microsoft.Extensions.Configuration -Version 2.0.0 
 Install-Package Microsoft.Extensions.Configuration.Abstractions -Version 2.0.0

Dies ist die grundlegende Referenz der JSON-Konfiguration. Wir erstellen die Datei appsettings.json in der Konsolenanwendung und definieren die folgenden JSON-Konfigurationsdateiinformationen:

Dann benötigen Sie nur noch den folgenden Code, um die Dateiinformationen zu erhalten:

 Install-Package Microsoft.Extensions.Configuration.Json -Version 2.0.0

Für Freunde, die bereits Erfahrung in der Kernentwicklung haben, das oben Genannte kann direkt verstanden werden, aber für eine vollständige Erklärung muss es hier noch kurz erwähnt werden:

Nach der ConfigurationBuilder-Instanz müssen Sie den Basispfad der Konfigurationsdatei über die SetBasePath-Methode festlegen und dann Geben Sie den Dateinamen an, der über die AddJsonFile-Erweiterungsmethode gelesen werden soll. Zum Schluss ist die Build-Methode erforderlich, um die Konfigurationsinformationen zu laden :
{
 "MyConfig": {
 "UserName": "神牛步行3",
 "userPwd": "666666",
 "GaoDeApi": {
  "UserName": "神牛步行1",
  "userPwd": "111111"
 },
 "BaiDuApi":{
  "userName": "神牛步行2",
  "userPwd": "222222"
 }
 }
}


Offensichtlich wird hier der Wert des MyConfig:UserName-Knotens in der Konfigurationsdatei abgerufen. Hier wird der Konfigurationsknoten über IConfigurationSection GetSection(string key) abgerufen. ;-Funktion: Die hierarchische Beziehung des Konfigurationsknotens ist mit „key=MyConfig:UserName;“ verknüpft. Um das Programm schöner und benutzerfreundlicher zu gestalten, finden Sie hier die Kapselungsmethode zum Abrufen die JSON-Datei wie folgt:

var configBasePath = Directory.GetCurrentDirectory(); //configBasePath = @"D:\D\TTest";
sbLog.Append($"配置文件所在目录:{configBasePath}\n");
var builder = new ConfigurationBuilder().
     SetBasePath(configBasePath).
     AddJsonFile("appsettings.json");
var config = builder.Build();
sbLog.Append($"MyConfig:UserName节点的值:{config.GetSection("MyConfig:UserName").Value}");

Bitte beachten Sie übrigens, dass die AddJsonFile-Methode übergeben wird. Die im Eröffnungsabschnitt referenzierte Microsoft.Extensions.Configuration.Json ist erweitert; da IConfiguration nicht nur die GetSection-Funktion verwendet, kann sie auch Knoten gemäß dieser [String-Key]-Methode abrufen. Im Folgenden finden Sie den Code und den Code zum Abrufen der Konfigurationsknoteninformationen von Amap bzw. Baidu Map

Hinweis: Bei Knoten wird die Groß-/Kleinschreibung nicht beachtet. Verwenden Sie „:“, um mehrstufige Knoten zu erhalten

Xml-Konfigurationsinformationen abrufen
/// <summary>
/// json配置文件读取
/// </summary>
/// <param name="configFileName"></param>
/// <param name="basePath"></param>
/// <returns></returns>
public static IConfigurationRoot GetJsonConfig(
   string configFileName = "appsettings.json",
   string basePath = "")
{
  basePath = string.IsNullOrWhiteSpace(basePath) ? Directory.GetCurrentDirectory() : basePath;
  var builder = new ConfigurationBuilder().
    SetBasePath(basePath).
    AddJsonFile(configFileName);
  return builder.Build();
}

XML-Konfigurationsdateien sind bei uns ebenfalls üblich. Für den erweiterten IConfigurationBuilder haben wir auch Erweiterungen ähnlich der json-Methode, die Sie zuerst angeben müssen das folgende Paket:

var configJson = GetJsonConfig();
sbLog.Append($"json配置-MyConfg节点的值:\n");
sbLog.Append($"高德-UserName:{configJson.GetSection("MyConfig:GaoDeApi:UserName").Value}\n");
sbLog.Append($"百度-userName:{configJson["MyConfig:BaiDuApi:UserName"]}\n\r\n");

Verwenden Sie dann fast denselben Code wie json, um die XML-Konfigurationsdatei abzurufen:

Der Unterschied liegt in der Erweiterung der AddXmlFile-Methode von IConfigurationBuilder. Dieses Beispiel verwendet den öffentlichen statischen IConfigurationBuilder AddXmlFile (dieser IConfigurationBuilder-Builder, Actionae92d117680019c8adb696c6f7aa0015 configureSource) zur Diversifizierung, um den Namen und den Basispfad der Konfigurationsdatei zu übergeben 🎜>Lassen Sie uns die Informationen der Konfigurationsdatei appsettings.xml erstellen und initialisieren:


Sehen wir uns einen Teil des Codes an, der zum Abrufen des Konfigurationsknotens aufruft:

 Install-Package Microsoft.Extensions.Configuration.Xml -Version 2.0.0


Es ist ersichtlich, dass die Art und Weise, wie XML und JSON Konfigurationsknoten lesen, gleich ist äußerster Knoten, wie hier: GaoDeApi:UserName, wenn Sie der JSON-Methode folgen, sollte der Schlüssel hier so aussehen: MyConfig:GaoDeApi:UserName, hier ist ein weiterer Unterschied zwischen den beiden, wie in der Abbildung gezeigt:

/// <summary>
/// xml配置文件读取
/// </summary>
/// <param name="configFileName"></param>
/// <param name="basePath"></param>
/// <returns></returns>
public static IConfigurationRoot GetXmlConfig(
   string configFileName = "appsettings.xml",
   string basePath = "")
{
   basePath = string.IsNullOrWhiteSpace(basePath) ? Directory.GetCurrentDirectory() : basePath;
   var builder = new ConfigurationBuilder().
    //SetBasePath(basePath).
    AddXmlFile(b =>
    {
     b.Path = configFileName;
     b.FileProvider = new PhysicalFileProvider(basePath);
    });
   return builder.Build();
}

Nein Es können sowohl JSON- als auch XML-Konfigurationsinformationen abgerufen werden


XML-Knotenattributwert abrufen
<MyConfig>
 <GaoDeApi>
 <UserName des="高德的账号">神牛步行1</UserName>
 <userPwd>111111</userPwd>
 </GaoDeApi>
 <BaiDuApi>
 <userName des="百度的账号">神牛步行2</userName>
 <userPwd>222222</userPwd>
 </BaiDuApi>
</MyConfig>

通常xml配置文件节点还有属性(attribute),如上面的xml节点: 7a286013418a1834dc7c3eeef39dd0f2神牛步行100d001d0ea2d832461d3ff9217bf550e ,这个des=""就是属性,我们要怎么才能获取这个值呢;这里其实同样还是通过':'来关联的,如下代码获取属性节点des的值:


sbLog.Append($"高德-UserName-des:{configXml.GetSection("GaoDeApi:UserName:des").Value}\n");
sbLog.Append($"百度-userName-des:{configXml["BaiDuApi:UserName:des"]}\n\r\n");

xml属性节点名称不能是name,不然是无法读取成功的;如这里的des改成name名称的话,无法正常获取信息,谨记于心;

配置文件能否不和应用放在一起呢? 答案是肯定的

有部分朋友会提出一个问题:配置文件能否不和应用放在一起呢? 答案是肯定的,我们只需把Directory.GetCurrentDirectory()(获取当前应用所在磁盘目录)替换成配置文件所在的基础目录就行了,如我这里的: configBasePath = @"D:\D\TTest";

下面是本次实例的整个测试用例代码:


using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Configuration.Json;
using Microsoft.Extensions.FileProviders;
using System;
using System.Diagnostics;
using System.IO;
using System.Text;
namespace MyService
{
 class Program
 {
  static void Main(string[] args)
  {
   Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
   Console.OutputEncoding = Encoding.GetEncoding("GB2312");
   var sbLog = new StringBuilder(string.Empty);
   var configBasePath = Directory.GetCurrentDirectory(); //configBasePath = @"D:\D\TTest";
   sbLog.Append($"配置文件所在目录:{configBasePath}\n");
   var builder = new ConfigurationBuilder().
    SetBasePath(configBasePath).
    AddJsonFile("appsettings.json");
   var config = builder.Build();
   sbLog.Append($"MyConfig:UserName节点的值:{config.GetSection("MyConfig:UserName").Value}\n\r\n");
   var configJson = GetJsonConfig();
   sbLog.Append($"json配置-MyConfg节点的值:\n");
   sbLog.Append($"高德-UserName:{configJson.GetSection("MyConfig:GaoDeApi:UserName").Value}\n");
   sbLog.Append($"百度-userName:{configJson["MyConfig:BaiDuApi:UserName"]}\n\r\n");
   var configXml = GetXmlConfig();
   sbLog.Append($"xml配置-MyConfg节点的值:\n");
   sbLog.Append($"高德-UserName:{configXml.GetSection("GaoDeApi:UserName").Value}\n");
   sbLog.Append($"百度-userName:{configXml["BaiDuApi:UserName"]}\n\r\n");
   sbLog.Append($"高德-UserName-des:{configXml.GetSection("GaoDeApi:UserName:des").Value}\n");
   sbLog.Append($"百度-userName-des:{configXml["BaiDuApi:UserName:des"]}\n\r\n");
   Console.WriteLine(sbLog);
   Console.ReadLine();
  }
  /// <summary>
  /// json配置文件读取
  /// </summary>
  /// <param name="configFileName"></param>
  /// <param name="basePath"></param>
  /// <returns></returns>
  public static IConfigurationRoot GetJsonConfig(
   string configFileName = "appsettings.json",
   string basePath = "")
  {
   basePath = string.IsNullOrWhiteSpace(basePath) ? Directory.GetCurrentDirectory() : basePath;
   var builder = new ConfigurationBuilder().
    SetBasePath(basePath).
    AddJsonFile(configFileName);
   return builder.Build();
  }
  /// <summary>
  /// xml配置文件读取
  /// </summary>
  /// <param name="configFileName"></param>
  /// <param name="basePath"></param>
  /// <returns></returns>
  public static IConfigurationRoot GetXmlConfig(
   string configFileName = "appsettings.xml",
   string basePath = "")
  {
   basePath = string.IsNullOrWhiteSpace(basePath) ? Directory.GetCurrentDirectory() : basePath;
   var builder = new ConfigurationBuilder().
    //SetBasePath(basePath).
    AddXmlFile(b =>
    {
     b.Path = configFileName;
     b.FileProvider = new PhysicalFileProvider(basePath);
    });
   return builder.Build();
  }
 }
}

Das obige ist der detaillierte Inhalt vonEine Erklärung, wie .NetCore Konfigurationsinformationen in Json- und XML-Formaten erhält. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn