.NET Core技术研究-最实用最常用的配置读取方式
升级ASP.NET Core后,配置的读取是第一个要明确的技术。原先的App.Config、Web.Config、自定义Config在ASP.NET Core中如何正常使用。有必要好好总结整理一下,相信大家都会用到。 首先,看一下ASP.NET Core中的配置提供程序(Configuration Providers): 一、配置提供程序(Configuration Providers) ?ASP.NET Core 使用一个或多个配置提供程序来读取配置:
? 我们通过下面的代码,输出配置提供程序的加载顺序: var configRoot = (IConfigurationRoot)Configuration;
foreach (var provider in configRoot.Providers.ToList())
{
Debug.WriteLine(provider.ToString() + "n");
}
输出有5个:? ?
?接下来我们我们重点介绍“应用程序配置文件”,“环境变量”,“命令行参数”,“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"]; ? ? ? ? ? 默认的JsonConfigurationProvider ,按以下顺序加载?appsettings.json文件:? ?? ? ? ① appsettings.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,将在以下配置源之后从命令行参数键值对加载配置:
? ?继续使用第三章中的示例工程,新建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 ? ? ? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – 网站随时随地突破
- asp.net-mvc-4 – 使用WebAPI进行搜索
- asp.net core EF code first
- asp.net – dropdownlist在页面重新加载时不会重置
- asp.net-mvc-3 – Razor视图类型不继承自’System.Web.WebP
- asp.net – Web服务互操作性 – wsdl复杂类型扩展
- 如何使用ASP.NET和iframe对跨域的用户进行身份验证?
- asp.net – web.config使用规则将非www或非https重定向到ht
- 文档在线预览的实现
- .net – VS2017 15.3解决方案文件中的新GlobalSection是什么
- asp.net-mvc – ModelState.AddModelError – 未
- asp.net-mvc – Ajax重定向到页面而不是更新目标
- oauth-2.0 – 连接Auth令牌并将其传递给启用了CO
- asp.net-mvc – MVC 5渲染视图到字符串
- asp.net-mvc – Windsor NHibernate ISession MV
- ASP.Net Core 2.0 Webapi设置了log4net
- asp.net-mvc – 帮助/提示提高我的ASP.NET MVC 2
- asp.net – 如何创建一个HTML Helper来扩展TextB
- asp.net全局资源错误’找不到具有键”的资源对象
- ASP.NET MVC 3:在发送HTTP标头后,服务器无法追加