如何配置 ASP.NET Core 应用程序?
在应用程序开发期间,甚至在应用程序构建完成后,您通常需要更改各种控制应用程序行为的设置。配置是指控制应用程序行为的外部值,包括应用程序在运行时使用的设置和参数。
关于存储配置值的最佳实践是将其存储在应用程序外部,而不是将其硬编码在源代码中。您不希望每次更改配置时都重新编译并重新启动应用程序。还存在安全隐患。您不希望将数据库连接字符串或密码以纯文本形式存储在源代码中。
ASP.NET Core 使管理应用程序的配置变得非常容易。您可以通过各种来源配置设置,例如 JSON 文件、环境变量和命令行参数。框架负责加载这些设置,并通过统一的配置对象提供它们。它支持多种文件格式,例如 JSON、XML、YAML 等。您还可以创建自己的自定义配置提供程序。框架还允许您覆盖设置。
以下是 ASP.NET Core 支持的各种配置提供程序
例如 appsettings.json 的设置文件
环境变量
Azure Key Vault
Azure 应用配置
命令行参数
已安装或创建的自定义提供程序
目录文件
内存中的 .NET 对象
Program 类中的 CreateDefaultBuilder() 方法提供了默认配置。
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.UseStartup<Startup>(); }); }
此方法按以下顺序加载配置
ChainedConfigurationProvider
appsettings.json
appsettings.Environment.json
应用程序机密
环境变量
命令行参数
如果您稍后添加了更多配置提供程序,它们将覆盖先前的设置。
环境变量
EnvironmentVariablesConfigurationProvider 从环境变量加载配置值作为键值对。这是在读取 appsettings.json、appsettings.Environment.json 和用户机密之后完成的。因此,来自环境变量的设置会覆盖来自 appsettings.json 文件和用户机密的设置。
在 Windows 上,您可以使用 set 或 setx 命令设置环境变量。
set CONN_STR="Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;"
命令行变量
通过命令行设置的配置设置会覆盖所有其他配置提供程序。它使用 CommandLineConfigurationProvider 从命令行参数加载配置作为键值对。例如
dotnet run CONN_STR="Server=myServerAddress; Database=myDataBase; User Id=myUsername; Password=myPassword;"