当前位置: 首页 > news >正文

沧州网站域名注册服务公司wordpress suspected

沧州网站域名注册服务公司,wordpress suspected,wordpress 图片分离,搭建国外网站的步骤ASP.NET Core - 配置系统之配置提供程序 3. 配置提供程序3.1 文件配置提供程序3.1.1 JSON配置提供程序3.1.2 XML配置提供程序3.1.3 INI配置提供程序 3.2 环境变量配置提供程序3.3 命令行配置提供程序3.4 内存配置提供程序3.5 配置加载顺序 3.6 默认配置来源 3. 配置提供程序 前… ASP.NET Core - 配置系统之配置提供程序 3. 配置提供程序3.1 文件配置提供程序3.1.1 JSON配置提供程序3.1.2 XML配置提供程序3.1.3 INI配置提供程序 3.2 环境变量配置提供程序3.3 命令行配置提供程序3.4 内存配置提供程序3.5 配置加载顺序 3.6 默认配置来源 3. 配置提供程序 前面的章节提到通过 IConfigurationBuilder 的实现类对象我们可以自由地往配置系统中添加不同的配置提供程序从而获取不同来源的配置信息。.NET Core 中微软提供了以下这些内置的配置提供程序 文件配置提供程序环境变量配置提供程序命令行配置提供程序Azure应用配置提供程序Azure Key Vault 配置提供程序Key-per-file配置提供程序内存配置提供程序应用机密机密管理器自定义配置提供程序 这里稍微介绍一下常用的几个。 3.1 文件配置提供程序 顾名思义这个就是我们熟悉的配置加载方式从配置文件中加载配置信息。配置文件多种多样.NET Core 框架内置支持 Json、xml、ini 三种格式的文件提供程序 JSON配置提供程序JsonConfigurationProviderXML配置提供程序XmlConfigurationProviderINI配置提供程序IniConfigurationProvider 以上这些配置提供程序均继承于抽象基类 FileConfigurationProvider当一个提供程序中发现重复的键时提供程序会引发 FormatException所有类型的文件提供程序都是这样的机制。 另外所有文件配置提供程序都支持提供两个配置参数 optionalbool 类型指示该文件是否是可选的。如果该参数为false但是指定的文件又不存在则会报错。reloadOnChangebool 类型指示该文件发生更改时是否要重新加载配置。 3.1.1 JSON配置提供程序 JSON 配置提供程序被封装在 Microsoft.Extensions.Configuration.Json Nuget包中若通过 ConfigurationBuilder 自行构建配置系统需要先安装该依赖包。它通过 JsonConfigurationProvider 在运行时从 Json 文件中加载配置。 使用方式非常简单通过 IConfigurationBuilder 的实现类对象调用 AddJsonFile 扩展方法指定Json配置文件的路径即可。以下代码可用于控制台程序中创建主机并设置配置系统 using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting;using var host Host.CreateDefaultBuilder(args).ConfigureAppConfiguration((context, config) {// 清除原有的配置提供程序config.Sources.Clear();var env context.HostingEnvironment;// 添加 json 配置文件config.AddJsonFile(appsettings.json,true, true).AddJsonFile($appsetting.{env.EnvironmentName}.json, true, true);}).Build();var configuration host.Services.GetServiceIConfiguration();Console.WriteLine($Settings:Provider: {configuration.GetValuestring(Settings:Provider)});host.Run();appsetting.json 配置文件中的内容如下 {Settings: {Provider: JsonProvider,version: {subKey1: value,subKey2: 1},items: [ item1, item2, item3 ]} }控制台程序运行之后输出如下 这样有一点要注意的是对于我们手动添加的配置文件需要设置一下文件属性让其在项目生成的时候能够正常生成到运行目录确保应用可以正常获取到该文件 3.1.2 XML配置提供程序 XML 配置提供程序被封装在 Microsoft.Extensions.Configuration.Xml Nuget包中通过 XmlConfigurationProvider 类在运行时从 XML 文件加载配置。 使用方式也很简单与 JSON 配置提供程序类似通过 AddXmlFile 扩展方法指定配置文件路径。 using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting;using var host Host.CreateDefaultBuilder(args).ConfigureAppConfiguration((context, config) {// 清除原有的配置提供程序config.Sources.Clear();var env context.HostingEnvironment; 添加 json 配置文件//config.AddJsonFile(appsettings.json,true, true)// .AddJsonFile($appsetting.{env.EnvironmentName}.json, true, true);config.AddXmlFile(appsettings.xml, true, true);}).Build();var configuration host.Services.GetServiceIConfiguration();Console.WriteLine($Settings:Provider: {configuration.GetValuestring(Settings:Provider)}); Console.WriteLine($Settings:items[1]: {configuration.GetValuestring(Settings:items:1)});host.Run();xml 配置文件内容如下 ?xml version1.0 encodingutf-8 ? configurationSettingsProviderXmlProvider/ProviderversionsubKey1value/subKey1subKey21/subKey2/versionitemsitem1/itemsitemsitem2/itemsitemsitem3/items/Settings /configuration运行程序控制台输出如下 这里有一个和版本有关的点对Xml文件中使用同一元素名称的重复元素一般也就是数组.NET 6及之后的xml配置提供程序会自动为其编制索引不再需要显式指定name属性。如果是 .NET 6 以下的版本则需要这样了 ?xml version1.0 encodingutf-8 ? configurationSettingsProviderXmlProvider/ProviderversionsubKey1value/subKey1subKey21/subKey2/versionitems nameitemkey1item1/itemsitems nameitemkey2item2/itemsitems nameitemkey3item3/items/Settings /configurationConsole.WriteLine($Settings:items[1]: {configuration.GetValuestring(Settings:items:itemkey2)});另外xml文件中的属性也可用于提供值 ?xml version1.0 encodingUTF-8? configurationkey attributevalue /sectionkey attributevalue //section /configuration获取属性的值可用以下配置键 key:attribute section:key:attribute3.1.3 INI配置提供程序 INI 配置提供程序被封装在 Microsoft.Extensions.Configuration.Ini Nuget包通过 IniConfigurationProvider 类在运行时从 INI 文件加载配置。使用方式如下 ini 配置文件内容如下 [Settings] ProviderIniProvider version:subKey1value version:subKey21 items:0item1 items:1item2 items:3item3运行应用控制台输出如下 3.2 环境变量配置提供程序 环境变量配置提供程序被封装在 Microsoft.Extensions.Configuration.EnvironmentVariables 通过 EnvironmentVariablesConfigurationProvider 在运行时从环境变量中以键值对的方式加载配置。 环境变量一般情况下是配置在机器上的而不同的操作系统对环境变量的设置要求有所不同当环境变量存在多层的时候层级之间的分隔有些支持通过 : 号进行分隔有些不支持双下划线 __ 是全平台支持的所以设置环境变量的时候要使用双下划线 __ 来代替冒号 :。 各种不同的平台下怎么去添加环境变量这里就不细说了Windows 下大家最起码都应该知道可以通过 我的电脑 - 属性 - 高级系统设置 去可视化的添加命令行的方式可阅读下官方文章 ASP.NET Core 中的配置 | Microsoft LearnLinux 平台下可以通过 export 命令临时添加或者修改相应的配置文件 ~/.bashrc 或 /etc/profile大家仔细查一下资料就行了。 除了在机器上直接设置环境变量外我们开发测试的过程中也可以通过 ASP.NET Core 框架下的 launchSettings.json 配置文件设置用于调试的临时环境变量。在应用启动调试时该文件中的环境变量会替代系统的中的环境变量。 {$schema: https://json.schemastore.org/launchsettings.json,profiles: {ConfigurationSample: {commandName: Project,dotnetRunMessages: true,launchBrowser: true,launchUrl: swagger,applicationUrl: http://localhost:5004,environmentVariables: {ASPNETCORE_ENVIRONMENT: Development,Custom_settings__Provider: EnvironmentVariablesProvider,Custom_settings__version__subKey1: value,Custom_settings__items__0: item1,Custom_settings__items__1: item2,Custom_settings__items__2: item3}}} }环境变量配置提供程序使用也很简单注意以下示例为了使用 launchSettings.json 中的环境变量是在 ASP.NET Core 项目中测试的。 var builder WebApplication.CreateBuilder(args);builder.Host.ConfigureAppConfiguration(builder {builder.Sources.Clear();// 筛选前置为 Custom_ 的环境变量将其加载为应用配置其他的不加载builder.AddEnvironmentVariables(Custom_); });var app builder.Build();Console.WriteLine($Settings:Provider: {app.Configuration.GetValuestring(Settings:Provider)}); Console.WriteLine($Settings:items[1]: {app.Configuration.GetValuestring(Settings:items:1)});app.Run();在添加环境变量时通过指定参数 prefix只读取限定前缀的环境变量。不过在读取环境变量时会将前缀删除。如果不指定参数 prefix那么会读取所有环境变量。 当创建默认通用主机Host时默认就已经添加了前缀为DOTNET_的环境变量如果是在 ASP.NET Core 中配置了 Web 主机时默认添加了前缀为 ASPNETCORE_ 的环境变量而后主机加载应用配置时再根据策略添加了其他的环境变量如果没有传递 prefix 参数则是所有环境变量。这一块的加载机制下面再细讲。 运行应用控制台输出如下 除此之外环境变量提供程序还有一些隐藏的功能点当没有向 AddEnvironmentVariables 传入前缀时默认也会针对含有以下前缀的环境变量进行特殊处理 这个功能点比较少用到但是大家看到这个大概都会有点疑惑具体的形式是怎么样的下面稍微测试一下 首先在 launchSettings.json 文件中添加多一个环境变量 MYSQLCONNSTR_Default: ServermyServerAddress;DatabasemyDataBase;UidmyUsername;PwdmyPassword;之后在应用中打印如下两个配置 Console.WriteLine($ConnectionStrings:Default: { app.Configuration.GetValuestring(ConnectionStrings:Default) }); Console.WriteLine($ConnectionStrings:Default_Provider: { app.Configuration.GetValuestring(ConnectionStrings:Default_ProviderName) });输出结果如下 也就是说这种形式的环境变量会被自动转换为两个。 3.3 命令行配置提供程序 命令行配置提供程序被封装在 Microsoft.Extensions.Configuration.CommandLine 包中通过 CommandLineConfigurationProvider 在运行时从命令行参数键值对中加载配置。 当我们通过 dotnet 命令启动一个 .NET Core 应用时我们可以在命令后面追加一些参数这些参数将在入口文件中被 args 变量接收到。命令行配置提供程序使用如下 using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting;using var host Host.CreateDefaultBuilder(args).ConfigureAppConfiguration((context, config) {// 清除原有的配置提供程序config.Sources.Clear();config.AddCommandLine(args);}).Build();var configuration host.Services.GetServiceIConfiguration();Console.WriteLine($Settings:Provider: {configuration.GetValuestring(Settings:Provider)}); Console.WriteLine($Settings:items[1]: {configuration.GetValuestring(Settings:items:1)});host.Run();之后通过命令行程序启动应用并传入相应的参数 dotnet ConfigurationSampleConsole.dll Settings:ProviderCommandLineProvider Settings:items:1item1命令行参数的设置有三种方式 (1) 使用 号连接键值 dotnet ConfigurationSampleConsole.dll Settings:ProviderCommandLineProvider Settings:items:0item1 Settings:items:1item2(2) 使用 / 号表示键值跟在键后面键值以空格分隔 dotnet ConfigurationSampleConsole.dll /Settings:Provider CommandLineProvider /Settings:items:0 item1 /Settings:items:1 item2(3) 使用 – 符号表示键值跟在键后面键值以空格分隔 dotnet ConfigurationSampleConsole.dll --Settings:Provider CommandLineProvider --Settings:items:0 item1 --Settings:items:1 item2如果值之中本来就有空格的可以使用 “” 号包括。 dotnet ConfigurationSampleConsole.dll --Settings:Provider CommandLineProvider --Settings:items:0 item1 --Settings:items:1 test item2AddCommandLine 扩展方法提供了重载允许额外传入一个参数该参数提供一个交换映射字典针对命令行配置参数进行key映射。例如命令行传入键是 name01 映射后的的键为 project:name。这里有一些要注意的点 交换映射key必须以-或--开头。当使用-开头时命令行参数书写时也要以-开头当使用--开头时命令行参数书写时可以以--或/开头。交换映射字典中的 key 不区分大小写不能包含重复 key。如不能同时出现-n和-N但可以同时出现-n和--n using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting;using var host Host.CreateDefaultBuilder(args).ConfigureAppConfiguration((context, config) {// 清除原有的配置提供程序config.Sources.Clear();var switchMappings new Dictionarystring, string{[--b1] Settings:Provider,[-b2] Settings:items};config.AddCommandLine(args, switchMappings);}).Build();var configuration host.Services.GetServiceIConfiguration();Console.WriteLine($Settings:Provider: {configuration.GetValuestring(Settings:Provider)}); Console.WriteLine($Settings:items[1]: {configuration.GetValuestring(Settings:items:1)});host.Run();3.4 内存配置提供程序 内存配置提供程序就比较简单了它直接被包含在 Microsoft.Extensions.Configuration通过 MemoryConfigurationProvider 在运行时从内存中的集合中加载配置。使用方式如下 using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting;using var host Host.CreateDefaultBuilder(args).ConfigureAppConfiguration((context, config) {// 清除原有的配置提供程序config.Sources.Clear();config.AddInMemoryCollection(new Dictionarystring, string {{ Settings:Provider, InMemoryProvider },{ Settings:items:1, MemoryItem }});}).Build();var configuration host.Services.GetServiceIConfiguration();Console.WriteLine($Settings:Provider: {configuration.GetValuestring(Settings:Provider)}); Console.WriteLine($Settings:items[1]: {configuration.GetValuestring(Settings:items:1)});host.Run();3.5 配置加载顺序 上面介绍了一些常用的配置提供程序这些配置提供程序都是通过扩展方法添加到 ConfigurationBuilder 对象中的而从上面 ConfigurationBuilder 的源码可以看出添加一个配置提供程序的时候其实应该是添加了一个对应的 IConfigurationSource 对象而后在 ConfigurationBuilder 中被保存到集合中。 这就可以看出配置系统是允许同时添加多种配置提供程序支持多来源的配置信息同时存在的。那么当多个配置处理程序都被添加到配置系统之中那我们从配置系统中通过配置键获取配置值的时候是怎么进行的呢当多个配置提供程序存在相同的配置键时我们获取到的配置值是哪个呢 从 ConfigurationRoot 的源码中可以可以看到当我们用索引器API读取配置值时是调用了 GetConfiguration 方法 而GetConfiguration方法中的逻辑也很简单只是遍历提供程序集合尝试从提供程序去获取值需要关注的是遍历的顺序。 这里的逻辑是这样子的倒序进行遍历后添加的配置处理程序先被遍历一旦通过key从提供程序中获取到值就返回结果不再继续遍历。所以添加配置提供程序的顺序决定相同配置键最终的值 当多个配置处理程序存在相同键时越后添加的配置提供程序优先级越高从最后的一个提供程序获取到值之后就不再从其他处理程序获取。 3.6 默认配置来源 上面也有提到通过主机运行和管理应用在通过主机运行的项目中主机在启动的时候就已经默认添加了一些配置提供程序所以我们创建了一个 ASP.NET Core 模板项目之后就可以获取到 appsettings.json 等配置文件中的配置信息。下面介绍一下默认添加的配置提供程序。 在 Host.CreateDefaultBuilder(String[]) 方法或者 WebApplication.CreateBuilder(args) 方法执行的时候会按照以下顺序添加应用的配置提供程序 (1) 内存配置提供程序 (2) Chained 配置提供程序(添加现有的主机配置) (3) JSON 配置提供程序 (添加 appsettings.json 配置文件) (4) JSON 配置提供程序 (添加 appsettings.{Environment}.json 配置文件) (5) 机密管理器仅Windows (6) 环境变量配置提供程序 (未限定前缀) (7) 命令行配置提供程序 配置分主机配置和应用配置主机启动时应用仍未启动主机启动过程中的配置就是主机配置。上面第一个Chained 配置提供程序就是承接过来的主机配置。而主机配置是按照以下顺序加载的 (1) 环境变量配置提供程序(以 DOTNET_ 为前缀的环境变量) (2) 命令行配置提供程序 (命令行参数) (3) 环境变量配置提供程序(以 ASPNETCORE_ 为前缀的环境变量如果是Web主机的话) 所以最终的应用配置加载顺序应该是下面这样 (1) 内存配置提供程序 (2) 环境变量配置提供程序(以 DOTNET_ 为前缀的环境变量) (3) 命令行配置提供程序 (命令行参数) (4) 环境变量配置提供程序(以 ASPNETCORE_ 为前缀的环境变量如果是Web主机的话) (5) JSON 配置提供程序 (添加 appsettings.json 配置文件) (6) JSON 配置提供程序 (添加 appsettings.{Environment}.json 配置文件) (7) 机密管理器仅Windows (8) 环境变量配置提供程序 (未限定前缀) (9) 命令行配置提供程序 (命令行参数) 按照越后面添加的提供程序优先的方式最终应用配置会覆盖主机配置并且最优先是最后添加的命令行配置提供程序我们可以通过以下方式打印配置系统中所有的配置提供程序进行验证 var builder WebApplication.CreateBuilder(args);var app builder.Build();var configurationRoot (IConfigurationRoot)app.Configuration; foreach (var provider in configurationRoot.Providers.AsEnumerable()) {Console.WriteLine(provider.ToString()); }app.Run();最终控制台打印出来的结果如下 虽然应用配置优先会覆盖前面的主机配置但是有一些变量会在初始化主机生成器的时候就提前进行锁定并且之后不会受应用配置的影响 应用程序名称环境名称例如 Development、Production 和 Staging内容根目录Web 根目录是否要扫描托管启动程序集以及要扫描哪些程序集(IHostringStartup)。应用和库代码从 IHostBuilder.ConfigureAppConfiguration 回调中的 HostBuilderContext.Configuration 读取的变量。 这里提到环境名称其实也就是软件运行的环境最最基本的也会分为开发环境、生产环境两种。软件运行环境通过环境变量来设置普通的.NET Core 应用环境变量key为NETCORE_ENVIRONMENTWeb应用环境变量key为ASPNETCORE_ENVIRONMENTWeb应用下如果两者同时存在后者会覆盖前者。软件应用根据不同的环境会有不同的行为逻辑例如上面讲到的 appsettings.{environment}.json 根据环境而不同的配置文件例如之前的 入口文件 文章中讲到的 Startup 文件根据不同环境的分离配置方式而我们在代码中有时也会根据环境处理不同的逻辑这时候我们可以注入 IHostEnvironment 服务通过它获取当前应用的运行环境入口文件中无论是 WebApplicationBuilder 对象还是 WebApplication 对象都包含该类型的属性。 通过环境变量设置当前运行环境其实环境变量的值只是一个字符串我们可以设置成任意值.NET Core 框架下 IHostEnvironment 也能够正常加载到相应的环境名称但是.NET Core 默认只提供了对 Development、Production 和 Staging 三种环境的判别以及相应的处理逻辑和扩展方法如果是其他的自定义环境则需要开发人员自行进行相应的处理了。和 .NET Core 应用环境相关的知识点大家可以看一下官方文档 在 ASP.NET Core 中使用多个环境 | Microsoft Learn 除了上面讲到的主机配置其他还有一些主机配置例如URLS但这个是可以通过应用配置设置的读取相应的配置值时也应从应用配置读取。 URLS 配置Web应用启动后的访问地址这个配置可以多个地方设置其中命令行参数最优先其他地方设置的应该被命令行参数覆盖。但是如果通过Kestrel 终结点方式设置了Web应用的访问地址那Kestrel 终结点的配置将覆盖其他所有的访问地址的配置。 如在 appsettings.json 中添加以下配置 Kestrel: {Endpoints: {Https: {Url: https://localhost:9999}} }那么以下几种方式设置的 URLS 都会失效 UseUrls命令行上的 --urls环境变量 ASPNETCORE__URLS 也就是说就算我们用以下命令启动应用应用最终的访问地址还是以 Kestrel 终结点配置的为准 dotnet run --urlshttps://localhost:7777Kestrel 配置与 URLS 配置不是一个参数我们可以通过在命令行或者环境变量中设置 kestrel 中间点配置来覆盖 appsettings.json 中的这又回到配置提供程序的优先级问题了。 set Kestrel__Endpoints__Https__Urlhttps://localhost:8888dotnet run Kestrel__Endpoints__Https__Urlhttps://localhost:8888在主机启动的逻辑中Kestrel具备更高的最终优先级但是其实主机内部是先根据URLS创建了一个终结点之后又替换为 Kestrel 配置的终结点的。通过应用启动时的控制台输出可以看出。 这种情况对于单机应用没有什么影响但是对于使用自动服务发现的微服务架构而言就可能有问题了可能导致注册到服务注册中心的终结点是第一个而后应用终结点又被改变导致注册中心记录的服务终结点和实际的不一致。 参考文章 ASP.NET Core 中的配置 | Microsoft Learn 配置 - .NET | Microsoft Learn 理解ASP.NET Core - 配置(Configuration) ASP.NET Core 系列总结 目录ASP.NET Core 系列总结 上一篇ASP.NET Core — 配置系统之配置添加 下一篇ASP.NET Core — 配置系统之自定义配置提供程序
http://www.hkea.cn/news/14394214/

相关文章:

  • 建设企业网站注意事项西宁企业网站建设开发
  • 有教做素食的网站吗wordpress主题翻译插件
  • 外贸网站设计风格张家界公司网站建设
  • 网站建设新闻++常识网页设计软件列表点击查看
  • 虚拟网站官网销售员做网站
  • 域名网站模板4399电脑版网页版入口
  • 智能网站建设公司个人小程序商城
  • asp.net视频网站模板下载现在学计算机好找工作吗
  • 网站销售怎么样做外贸用什么网站
  • 四川蓉和建设公司网站创客网站建设
  • 网站开发基本构成防城港建设局网站
  • 哪些网站推广公司上海市建设工程造价信息网官网
  • 网站开发可选择方案有哪些金富通青岛建设工程有限公司网站
  • 九江市住房和城乡建设厅网站上海网站企业
  • 网站设计网站建站wordpress 表情包
  • 网站开发与设计开题报告域名可以免费注册吗
  • 芜湖小学网站建设京东网站建设的策划书
  • 怎样才可以知道网站是否优化wordpress-zh
  • h5必备网站动态域名解析 免费
  • 怎么做网站相册帮助安装wordpress
  • 网站这么做给网站开发一个计算器功能
  • 淄博网站制作设计公司做一个自己的网站
  • 如何自己建设简单的手机网站首页推荐软件分类
  • 上饶便宜的做网站公司网站建设模板双人
  • 网站建设如何在宣传部备案网站制作公司北京华网
  • 做网站编辑需要具备的素质网页设计模板html代码怎么写
  • 网站文件结构网站设计报告
  • 查房价的官方网站手机建设银行网站首页
  • 青海建设工程云网站网站选择语言怎么做
  • 简单网站制作实例简约个人博客html代码