.NET Core技术研究-最实用最常用的配置读取方式

.NET Core技术研究-最实用最常用的配置读取方式,第1张

概述升级ASP.NET Core后,配置读取是第一个要明确的技术。原先的App.Config、Web.Config、自定义Config在ASP.NET Core中如何正常使用。有必要好好总结整理一下,相

升级ASP.NET Core后,配置的读取是第一个要明确的技术。原先的App.Config、Web.Config、自定义Config在ASP.NET Core中如何正常使用。有必要好好总结整理一下,相信大家都会用到。

首先,看一下ASP.NET Core中的配置提供程序(Configuration ProvIDers):

一、配置提供程序(Configuration ProvIDers)

 ASP.NET Core 使用一个或多个配置提供程序来读取配置:

应用程序设置文件(配置文件),例如appsettings.Json环境变量:Environment variables命令行参数:Command-line arguments自定义的配置提供程序目录文件内存中的.NET对象(内存中的配置类)Azure Key Vault,详细说明参考这个连接:https://docs.microsoft.com/en-us/aspnet/core/security/app-secrets?vIEw=aspnetcore-3.0&tabs=windowsAzure应用程序配置:Azure App Configuration

  我们通过下面的代码,输出配置提供程序的加载顺序:

var configRoot = (IConfigurationRoot)Configuration;foreach (var provIDer in configRoot.ProvIDers.ToList()){    DeBUG.Writeline(provIDer.ToString() + "\n");}

 输出有5个:   

Microsoft.Extensions.Configuration.ChainedConfigurationProvIDer:链式的配置提供程序,可以添加已有的IConfiguration,作为一个配置源JsonConfigurationProvIDer for 'appsettings.Json' (Optional):读取appsettings.Json文件JsonConfigurationProvIDer for 'appsettings.Development.Json' (Optional):按环境读取不同的appsettings.Json文件,例如appsettings.Development.Json、appsettings.Production.JsonEnvironmentvariablesConfigurationProvIDer:读取环境变量CommandlineConfigurationProvIDer:读取命令行参数配置

 接下来我们我们重点介绍“应用程序配置文件”,“环境变量”,“命令行参数”,“app.config” 这四种最常用的配置读取方式,通过代码的方式,示例给大家:

二、读取应用程序设置文件appsettings.Json

 我们使用ASP.NET Core工程中默认的appsettings.Json文件

{  "Logging": {    "LogLevel": {      "Default": "information","Microsoft": "Warning","Microsoft.Hosting.lifetime": "information"    }  },"AllowedHosts": "*"}

 通过代码读取配置

var allowedHosts = Configuration["AllowedHosts"];       var defaultLogLevel = Configuration["Logging:LogLevel:Default"];DeBUG.Writeline("allowedHosts:" + allowedHosts + "\n");DeBUG.Writeline("defaultLogLevel:"+defaultLogLevel + "\n");

实际输出:

allowedHosts:*

defaultLogLevel:information

如果想读取整个的LogLevel对象,如何实现?

  新建LogLevel类和Logging类

   [DataContract]    public class LogLevel    {        [DataMember(name = "Default")]        public string Default { get; set; }        [DataMember(name = "Microsoft")]        public string Microsoft { get; set; }        [DataMember(name ="Microsoft.Hosting.lifetime")]                public string MicrosoftHostinglifetime { get; set; }    }    [DataContract]    public class Logging    {        [DataMember]        public LogLevel LogLevel { get; set; }    }

  读取Logging配置示例代码:

Logging logConfig = new Logging();Configuration.GetSection("Logging").Bind(logConfig);
var lifetime = Configuration["Logging:LogLevel:Microsoft.Hosting.lifetime"];
logConfig.LogLevel.MicrosoftHostinglifetime = lifetime;

     上述代码中,对lifetime属性的设置,通过以下方式实现,Bind的方式因为key匹配的问题,无法完成匹配。

     Configuration["Logging:LogLevel:Microsoft.Hosting.lifetime"];

     这个地方补充一个带环境类型的应用设置文件的价值顺序:比如说按环境分appsettings.Json文件

     

    默认的JsonConfigurationProvIDer ,按以下顺序加载 appsettings.Json文件:    

    ① appsettings.Json
    ② appsettings.Environment.Json,例如appsettings.Development.Json ,appsettings.Production.Json 

    关于appsettings.Environment.Json,Environment的设置主页在Program时指定的变量:    

public class Program    {        public static voID Main(string[] args)        {            CreateHostBuilder(args).Build().Run();        }        public static IHostBuilder CreateHostBuilder(string[] args) =>            Host.CreateDefaultBuilder(args)                .ConfigureWebHostDefaults(webBuilder =>                {                    webBuilder.UseEnvironment("Development");                    webBuilder.UseStartup<Startup>();                                    });    }

三、环境变量读取

   按照配置的加载顺序,EnvironmentvariablesConfigurationProvIDer从环境变量中读取配置信息,在appsettings.Json和Secret manager读取配置之后。

   这个地方有个分隔符的注意点,因为 :并不是在所有平台上都支持,建议统一使用__(双下划线),运行时会将__统一替换为:

   先通过以下命令,设置环境变量:

set Key1="Value1"set Logging__LogLevel__Customer=information

   代码中读取环境变量的配置 

 public static IHostBuilder CreateHostBuilder(string[] args) =>            Host.CreateDefaultBuilder(args)            .ConfigureAppConfiguration((hostBuilder,config) =>                {                    config.AddEnvironmentvariables();                })                .ConfigureWebHostDefaults(webBuilder =>                {                    webBuilder.UseEnvironment("Development");                    webBuilder.UseStartup<Startup>();                                    });

  修改Startup中Configure方法:读取配置并输出

var key1Value = Configuration["Key1"];var logLevel = Configuration["Logging:LogLevel:Customer"];Console.Writeline("key1Value:" + key1Value + "\n");Console.Writeline("logLevel:" + logLevel + "\n");

  

四、命令行参数读取

   命令行配置提供程序CommandlineConfigurationProvIDer,将在以下配置源之后从命令行参数键值对加载配置:

   appsettings.Json和appsettings。Environment。Json文件   开发环境中的应用程序机密(秘密管理器)   环境变量

   继续使用第三章中的示例工程,新建CMD命令行,输入以下dotnet run指令:

dotnet run Key1="Value1"  Logging:LogLevel:Customer="information"

  

五、app.config读取

   这个场景最大的作用就是兼容原有ASP.NET Web.Config文件!

   首先添加Nuget引用:System.Configuration.ConfigurationManager

   

   新增app.config文件:

<?xml version="1.0" enCoding="utf-8"?><configuration>  appSettings>    add key="ConfigKey1" value="Value" />     </>  >

 使用原有ConfigurationManager读取配置:

var value = System.Configuration.ConfigurationManager.AppSettings["ConfigKey1"];Console.Writeline("ConfigKey1:" + value + "\n");

 

以上就是ASP.NET Core常用的“应用程序配置文件”,“环境变量”,“命令行参数”,“app.config” 配置读取方式,分享给大家。

 

 

周国庆

2020/4/1

 

   

总结

以上是内存溢出为你收集整理的.NET Core技术研究-最实用最常用的配置读取方式全部内容,希望文章能够帮你解决.NET Core技术研究-最实用最常用的配置读取方式所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1214909.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存