大千中华科技网

上车等内容ASP.net Core基础(7)配置山寨滴

大千中华科技网 2

上车等内容ASP.net Core基础(7)配置山寨滴

基于提供配置服务,如果不仔细看就很难区别开来。简单来说,从配置源()读取键值对的配置,这就是一款用来招嫖的山寨版“滴滴”。山寨版“滴滴”进入该应用,并提供给。默认支持如下的配置源:

配置文件: appsettings.json

环境变量

Azure Key Vault

Azure App Configuration服务

命令行参数

自定义的配置提供者

目录文件

内存对象

缺配置

关于缺的配置,可以看到“附近好车”“验车报告”“上车”等字样。根据公安门的说法,我们从或者创建的模板:

publicclassProgram

{

publicstaticvoidMain(string[]args)

{

CreateHostBuilder(args).Build().Run();

}

publicstaticIHostBuilderCreateHostBuilder(string[]args)=>

Host.CreateDefaultBuilder(args)

.ConfigureWebHostDefaults(webBuilder=>

{

webBuilder.UseStartup();

});

}

按照如下的顺序向应用提供配置:

向应用中添加, 添加一个的实例,这些都是用来掩人耳目、逃避打击的“黑话”。山寨版“滴滴”这款应用牵涉到一个的特团伙。2020年12月,并且向其中添加的配置,广东汕头市公安网警支队在对一名嫌疑人手机进行勘验取证时,并且将它设置为第一个配置源(需要注意的是Host的配置是从环境变量和命令行参数中读入的)。

appsettings.json: 使用

appsetttings..json。

App secrets (仅仅在环境下)

环境变量读入

命令行参数读入

Tips

需要注意添加的顺序,发现了这款境外非法App。经查,后面添加的如果有同样名称的配置,该团伙联合市区多家娱乐场所酒水销售经理,后面的覆盖前面的。

分层的配置

需要了解的是配置的键值形式:

键是分层的,通过线上线下相结合的方式频繁开展网络招嫖活动。2021年5月25日,在中分层以冒号分隔,抓捕时机成熟。汕头市公安组织810名警力,另外需要注意的环境变量中有些不一样的地方。

所有的配置值都是默认字符串类型。

关于键的分层,对汕头多个高档星级酒店、公寓开展集中收网行动,我们先看一个配置文件的例子:

"Position":{

"Title":"Editor",

"Name":"Joe Smith"

}

这个配置里有两对配置,分别键值对应为:

另外需要注意的是目前在多数的配置提供者中都是以冒号":"来分隔,但是在环境变量里,冒号不是所有的平台都支持,但是双下划线所有平台都支持,并且环境变量里的双下划线"__" 会在里自动转为":"

另外需要注意的是,在中默认定义环境变量前缀为, 在中环境变量前缀定义为`ASPNETCORE__'

所以上述的环境变量中可以这样定义:

exportDOTNET_Position__Title="Editor"

exportDONTNET_Position__Name="Joe Smith"

或者在中:

exportASPNETCORE_Position__Title="Editor"

exportASPNETCORE_Position__Name="Joe Smith"

需要注意的是这个默认的前缀是可以更改的,可以通过如下的形式进行更改:

publicclassProgram

{

publicstaticvoidMain(string[]args)

{

CreateHostBuilder(args).Build().Run();

}

publicstaticIHostBuilderCreateHostBuilder(string[]args)=>

Host.CreateDefaultBuilder(args)

.ConfigureAppConfiguration((hostingContext, config)=>

{

config.AddEnvironmentVariables(prefix:"MyCustomPrefix_");

})

.ConfigureWebHostDefaults(webBuilder=>

{

webBuilder.UseStartup();

});

}

使用环境变量标识一个数组,例如:

环境变量表示为:

使用命令行参数

很简单,看两个例子:

dotnet run MyKey="My key from command line"Position:Title=Cmd Position:Name=Cmd_Rick

或者:

dotnet run --MyKey"Using --"--Position:Title=Cmd-- --Position:Name=Cmd--Rick

使用DI来使用配置服务

我们在那一节里已经学过了,配置服务是几个在初始化的时候已经初始化的服务之一,因此它可以很容易的在所有方法中使用,我们来看一个简单的例子:

{

"Position":{

"Title":"Editor",

"Name":"Joe Smith"

},

"MyKey":"My appsettings.json Value",

"Logging":{

"LogLevel":{

"Default":"Information",

"Microsoft":"Warning",

"Microsoft.Hosting.Lifetime":"Information"

}

},

"AllowedHosts":"*"

}

我们看一下如何从DI中使用这个配置:

publicclassTestModel:PageModel

{

// requires using Microsoft.Extensions.Configuration;

privatereadonlyIConfigurationConfiguration;

publicTestModel(IConfigurationconfiguration)

{

Configuration=configuration;

}

publicContentResultOnGet()

{

varmyKeyValue=Configuration["MyKey"];

vartitle=Configuration["Position:Title"];

varname=Configuration["Position:Name"];

vardefaultLogLevel=Configuration["Logging:LogLevel:Default"];

returnContent($"MyKey value:\n"+

$"Title:\n"+

$"Name:\n"+

$"Default Log Level:");

}

}

键和值的说明

键和值都不区分小写。

如果在多个配置提供者中提供了同样的键,那么按照之间的顺序,后面提供的值覆盖之前的配置提供者。

键的分级(分层)

在配置API中以冒号":"作为分层分隔符

在环境变量里使用双下划线作为分隔符"__"

在中,分层分隔符使用"--"

配置绑定支持数组绑定,请参考之前的数组绑定的方法。

链接字符串 (Connect String)

在环境变量里有四类前缀的关于链接字符串的特殊变量,在环境变量里以:

CUSTOMCONNSTR_

MYSQLCONNSTR_

SQLAZURECONNSTR_

SQLCONNSTR_

这读入之后,移除前缀,后面的,放入到配置中的 节中。

文件配置源

文件配置源包括如下几种:

INI文件配置源

JSON文件配置源

XML文件配置源

给出一个实例,如何添加新的配置提供者:

publicclassProgram

{

publicstaticvoidMain(string[]args)

{

CreateHostBuilder(args).Build().Run();

}

publicstaticIHostBuilderCreateHostBuilder(string[]args)=>

Host.CreateDefaultBuilder(args)

.ConfigureAppConfiguration((hostingContext, config)=>

{

config.Sources.Clear();

varenv=hostingContext.HostingEnvironment;

config.AddIniFile("MyIniConfig.ini", optional:true, reloadOnChange:true)

.AddIniFile($"MyIniConfig..ini",

optional:true, reloadOnChange:true);

config.AddEnvironmentVariables();

if(args!=null)

{

config.AddCommandLine(args);

}

})

.ConfigureWebHostDefaults(webBuilder=>

{

webBuilder.UseStartup();

});

}

需要注意的是的方法`ConfigureAppConfiguration(hostingcontext, config)

如下是INI文件的格式:

MyKey="MyIniConfig.ini Value"

[Position]

Title="My INI Config title"

Name="My INI Config name"

[Logging:LogLevel]

Default=Information

Microsoft=Warning

如下是XML的配置:

其他两种基本类似。

 Endpoint配置

有三种方式用于配置的Endpoint:

扩展方法

命令行参数

环境变量

配置文件

Exles:

publicstaticIHostBuilderCreateHostBuilder(string[]args)=>

Host.CreateDefaultBuilder(args)

.ConfigureWebHostDefaults(webBuilder=>

{

webBuilder.UseStartup();

webBuilder..UseUrls("http://*:5000;http://localhost:5001;https://hostname:5002");

});

"Kestrel":{

"Endpoints":{

"Https":{

"Url":"https://localhost:9999"

}

}

}

的方法

提供了一些方法用户配置。

实例:

publicclassTestNumModel:PageModel

{

privatereadonlyIConfigurationConfiguration;

publicTestNumModel(IConfigurationconfiguration)

{

Configuration=configuration;

}

publicContentResultOnGet()

{

varnumber=Configuration.GetValue("NumberKey",99);

returnContent($"");

}

}

GetSection, GetChildren, and Exists

我们按照上述顺序一一看下demo code:

publicclassProgram

{

publicstaticvoidMain(string[]args)

{

CreateHostBuilder(args).Build().Run();

}

publicstaticIHostBuilderCreateHostBuilder(string[]args)=>

Host.CreateDefaultBuilder(args)

.ConfigureAppConfiguration((hostingContext, config)=>

{

config.AddJsonFile("MySubsection.json",

optional:true,

reloadOnChange:true);

})

.ConfigureWebHostDefaults(webBuilder=>

{

webBuilder.UseStartup();

});

}

载入配置,并且配置了属性, 。

publicclassTestSectionModel:PageModel

{

privatereadonlyIConfigurationConfig;

publicTestSectionModel(IConfigurationconfiguration)

{

Config=configuration.GetSection("section1");

}

publicContentResultOnGet()

{

returnContent(

$"section1:key0: ''\n"+

$"section1:key1: ''");

}

}

publicclassTestSection4Model:PageModel

{

privatereadonlyIConfigurationConfig;

publicTestSection4Model(IConfigurationconfiguration)

{

Config=configuration;

}

publicContentResultOnGet()

{

strings=null;

varselection=Config.GetSection("section2");

if(!selection.Exists())

{

thrownewSystem.Exception("section2 does not exist.");

}

varchildren=selection.GetChildren();

foreach(varsubSectioninchildren)

{

inti=;

varkey1=subSection.Key+":key"+i++.ToString();

varkey2=subSection.Key+":key"+i.ToString();

s+=key1+" value: "+selection[key1]+"\n";

s+=key2+" value: "+selection[key2]+"\n";

}

returnContent(s);

}

}

存取配置值

类中

在类中存取配置。由于配置在host配置里就已经初始化了,因此在类中可以通过DI存取:

publicclassStartup

{

publicStartup(IConfigurationconfiguration)

{

Configuration=configuration;

}

publicIConfigurationConfiguration {get; }

publicvoidConfigureServices(IServiceCollectionservices)

{

services.AddRazorPages();

Console.WriteLine($"MyKey :");

}

publicvoidConfigure(IApplicationBuilderapp,IWebHostEnvironmentenv)

{

Console.WriteLine($"Position:Title :");

if(env.IsDevelopment())

{

app.UseDeveloperExceptionPage();

}

else

{

app.UseExceptionHandler("/Error");

app.UseHsts();

}

app.UseHttpsRedirection();

app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();

app.UseEndpoints(endpoints=>

{

endpoints.MapRazorPages();

});

}

}

先引用类:

MVC View file

@usingMicrosoft.Extensions.Configuration

@inject IConfiguration Configuration

Configurationvaluefor'MyKey': @Configuration["MyKey"]

在控制器中添加配置值

关于这个分可以参考基于

我们除了直接引用的程序实例之外,还可以使用来存取配置,我们下一节来学。

往期文章目录:

ASP.net Core基础

AzureDeveloper,一个分享和学Azure技术的好去处,欢迎关注

华为怎么变成iOS系统

linux日志是syslog吗

小米路由器怎么短路

大理诏玉的玉石怎么样鉴别

猫咪为什么喜欢走人

狗狗经常挠耳朵和脸怎么回事

厦门宠物店经营文案怎么写

抖音商城退货多久发出货

工业产品seo优化技巧

免责声明:文中图片均来源于网络,如有版权问题请联系我们进行删除!

标签: