检查 appsettings.json 的工作原理
环境
- Visual Studio
-
- Visual Studio 2019
- ASP.NET酷
-
- 3.0
- 3.1
入门
创建新的 ASP.NET Core 项目时,应用集.json和appsettings。 开发.json配置文件 包含在项目中。
此处设置的内容使用appsettings.json中设置的参数。 在开发过程中,同一键的参数是应用程序设置。 使用开发人员.json设置覆盖的内容。
我想在本文中看到如何切换和加载它们。
编辑以检查行为
尝试向每个配置文件添加参数,以查看其工作原理。 为每个测试对象添加一个部分,并添加TestValue参数。
appsettings.json 文件是使用 Shift-JIS 字符代码编写的,因此,如果您要输入日语, 请用 UTF-8 保存。
appsettings.json
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"AllowedHosts": "*",
"TestObject": {
"TestValue": "Root です。",
"Comment": "日本語を使用する場合は appsettings.json を UTF-8 で保存しなおすこと。"
}
}
应用设置。 开发.json
{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft": "Warning",
"Microsoft.Hosting.Lifetime": "Information"
}
},
"TestObject": {
"TestValue": "Development です。",
"Comment": "日本語を使用する場合は appsettings.json を UTF-8 で保存しなおすこと。"
}
}
获取HomeController.cs 索引操作中配置文件的参数。 有一种方法可以获取类,但我喜欢它,因为它不是主题。
private readonly ILogger<HomeController> _logger;
private readonly IConfiguration _configuration;
// DI で IConfiguration を受け取る
public HomeController(ILogger<HomeController> logger, IConfiguration configuration)
{
_logger = logger;
_configuration = configuration;
}
public IActionResult Index()
{
// appsettings.json から値を取得します。
// 階層化されている場合は GetSection を使用します。
ViewData["Message"] = _configuration.GetSection("TestObject").GetValue<string>("TestValue");
return View();
}
创建、绑定和加载类时,代码如下所示:
// クラス定義 public class TestObject { public string TestValue { get; set; } public string Comment { get; set; } } // 読み込み var testObject = _configuration.GetSection(nameof(TestObject)).Get<TestObject>();
显示视图端 Index.cshtml 中获取的值。
<p>appsettings.json から取得したテキストを表示</p>
<p>@ViewData["Message"]</p>
在本地执行调试
生成并调试项目后,可以应用。 您将看到"开发.json"设置。
选择开发端的原因是,在运行 ASP.NET Core 应用时加载环境变量。 设置为ASPNETCORE_ENVIRONMENT的参数设置为应用。 XXXX.json 将加载与XXXX部分匹配的配置文件。
在调试期间,开发人员已设置,这是项目属性的调试选项卡, 您可以看到环境变量已设置。
如果尝试将此值更改为其他值,然后执行调试,则 我认为,我们可以确保开发人员不会加载根端。
顺便说一下,此参数没有在调试或发布中隔离,因此,即使使用发布执行调试, 使用开发参数。 不能像在 Web.config 中那样在调试或发布中划分它们,但您可以注册多个配置文件。 您可以切换以响应操作,例如检查发布时的设置。
部署到 IIS 并运行
那么,如果将其部署到 IIS 并运行,会发生什么情况? 实际上,在 IIS 中创建站点并放置程序。
这将使用预期的路由设置。 因此,在 IIS 中部署程序时,无需担心开发人员设置。
如果 IIS 在 ASPNETCORE_ENVIRONMENT 环境变量中具有任何值,则可以在运行时加载配置文件。 从站点设置打开配置编辑器。
从"系统.webServer"部分中选择aspNetCore。
从位置选择应用程序主机.config。
打开环境变量的集合。
添加集合。
在名称中输入 ASPNETCORE_ENVIRONMENT,然后键入要加载到值中的配置文件的名称。
如果重新启动网站并显示 Web 屏幕,您将看到正在加载目标配置文件。
总结
初始配置时,在开发时应用。 如果加载了开发人员.json 设置并将其部署到生产环境(如 IIS), 我认为加载应用程序集.json 没有问题。
创建项目时,只有开发,但可以创建多个应用集,也可以将开发部分更改为任何名称。 如果有多个执行位置,则可以创建多个执行位置,然后根据环境设置 ASPNETCORE_ENVIRONMENT 以运行它。