Maison  >  Article  >  développement back-end  >  Une explication de la façon dont .NetCore obtient les informations de configuration aux formats Json et XML

Une explication de la façon dont .NetCore obtient les informations de configuration aux formats Json et XML

巴扎黑
巴扎黑original
2017-09-20 09:36:003657parcourir

Cet article partagera avec vous comment obtenir des informations de configuration en Json et jetons un coup d'oeil

Ce que je vais partager avec vous dans cet article est : comment obtenir des informations de configuration en Json et les informations de configuration de le fichier appsettings.json, j'ai donc mis le point de test sur l'application console de netcore ; utiliser les fichiers de configuration sur la console est également une chose courante, et les exemples du site officiel expliquent principalement le format json, et apportent directement le format xml Passé, je partage donc cet article, j'espère qu'il pourra vous aider ;

  1. Obtenir les informations de configuration Json

  2. Obtenir les informations de configuration XML

  3. Obtenir la valeur de l'attribut du nœud XML

Le fichier de configuration ne peut-il pas être placé avec l'application ? La réponse est oui

Pour l'extension netstandard de netcore, elle est livrée avec une classe d'opérations d'informations sur le fichier de configuration. Étant donné que l'application Web et l'application console de base sont unifiées, les cas de test sont expliqués ci-dessous dans l'application console, mais peuvent. également être utilisé pour les applications Web

Tout d'abord, nous devons référencer le package nuget suivant dans l'application console (mon test ici est basé sur 2.0) :


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

Obtenir les informations de configuration Json

Pour obtenir la configuration json, en plus des deux références ci-dessus, nous devons également citer :


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

Il s'agit de la référence de base de la configuration json. Nous créons le fichier appsettings.json dans l'application console et définissons les informations suivantes du fichier de configuration json :


{
 "MyConfig": {
 "UserName": "神牛步行3",
 "userPwd": "666666",
 "GaoDeApi": {
  "UserName": "神牛步行1",
  "userPwd": "111111"
 },
 "BaiDuApi":{
  "userName": "神牛步行2",
  "userPwd": "222222"
 }
 }
}

Ensuite, vous n'avez besoin que du code suivant pour obtenir les informations sur le fichier :


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}");

Pour les amis qui ont déjà une expérience de développement de base, ce qui précède peut être compris directement. , mais pour une explication complète, il faut encore le mentionner brièvement ici :

Après l'instance ConfigurationBuilder, vous devez définir le chemin de base du fichier de configuration via la méthode SetBasePath, puis spécifiez le nom du fichier à lire via la méthode d'extension AddJsonFile ; ces étapes renvoient Ce sont toutes des interfaces IConfigurationBuilder. Enfin, la méthode Build est requise pour charger les informations de configuration. Ce constructeur est un peu similaire pour commencer. rendu :

Évidemment, il est obtenu ici. La valeur du nœud MyConfig:UserName dans le fichier de configuration. Ici, le nœud de configuration est obtenu via IConfigurationSection GetSection (string key). ; fonction. La relation hiérarchique du nœud de configuration est liée par ":", voici donc key=MyConfig:UserName;

Pour la beauté et la polyvalence du programme, voici la méthode d'encapsulation pour obtenir le json; fichier comme suit :


/// <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();
}

Au fait, veuillez noter que la méthode AddJsonFile est passée. Le Microsoft.Extensions.Configuration.Json référencé dans la section d'ouverture est étendu ; puisque IConfiguration utilise non seulement la fonction GetSection, elle peut également obtenir des nœuds selon cette méthode [string key]. Voici le code et le code pour obtenir les informations sur les nœuds de configuration d'Amap et Baidu Map respectivement :


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");

Remarque : les nœuds ne sont pas sensibles à la casse, utilisez ':' pour obtenir des nœuds multi-niveaux

Obtenir des informations de configuration XMLLes fichiers de configuration XML nous sont également communs. Pour l'IConfigurationBuilder étendu, nous avons également des extensions similaires à la méthode json, vous devez d'abord citer ce qui suit. package :


Utilisez ensuite presque le même code que json pour obtenir le fichier de configuration XML :
 Install-Package Microsoft.Extensions.Configuration.Xml -Version 2.0.0


La différence réside dans l'extension de la méthode AddXmlFile de IConfigurationBuilder. Cet exemple utilise IConfigurationBuilder AddXmlFile statique public (ce générateur IConfigurationBuilder, Actionae92d117680019c8adb696c6f7aa0015 configureSource) pour la diversification afin de transmettre le nom du fichier de configuration et le chemin de base
/// <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();
}

. Créons et initialisons les informations du fichier de configuration appsettings.xml :


Regardons une partie du code qui appelle pour obtenir le nœud de configuration :
<MyConfig>
 <GaoDeApi>
 <UserName des="高德的账号">神牛步行1</UserName>
 <userPwd>111111</userPwd>
 </GaoDeApi>
 <BaiDuApi>
 <userName des="百度的账号">神牛步行2</userName>
 <userPwd>222222</userPwd>
 </BaiDuApi>
</MyConfig>


On peut voir que la façon dont XML et JSON lisent les nœuds de configuration est la même. " : : indique une relation hiérarchique, mais une attention particulière est que XML n'a pas besoin du nœud le plus externe. , comme ici : GaoDeApi :UserName, si vous suivez la méthode json, la clé ici devrait ressembler à ceci : MyConfig:GaoDeApi:UserName, voici une autre différence entre les deux comme le montre la figure :
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");

Non Les informations de configuration json et xml peuvent être obtenues

Obtenir la valeur de l'attribut du nœud XML

通常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();
  }
 }
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn