摘录自: Link
在哪里 配置?
- ASP.NET Core 2.0 之前,配置在
Startup.cs里 - ASP.NET Core 3.1 - ASP.NET Core 5.0, 配置在
Program.cs的WebHostBuilder - ASP.NET Core 6.0, 进一步简化配置,引入了迷你API
//ASP.NET Core 3.1 - ASP.NET Core 5.0
//自带的默认配置
public class Program {
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args).
ConfigureWebHostDefaults(webBuilder => {
webBuilder.UseStartup();
}
}
//ASP.NET Core 6.0
//自带的默认配置
Var builder = WebApplication.CreateBuilder(args);
builder.Services.AddControllersWithViews();
var app = builder.Build();
自定义的配置
使用
IWebHostBuilder的扩展方法ConfigureAppConfiguration()
//ASP.NET Core 3.1 - ASP.NET Core 5.0
//自定义的配置
Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.ConfigureAppConfiguration((builderContext,config) =>
{
//这里是配置内容
}).UseStartup();
});
//ASP.NET Core 6.0
//自定义的配置
builder.WebHost.ConfigureAppConfiguration((builderContext, config) =>
{
//这里是配置内容
});
//或者还有另一种更简单的方式:迷你API + 默认的配置文件
builder.Configuration.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
迷你API + 默认的配置文件
我们创建ASP.NET项目时,会生成一些默认配置文件。大多数开发者会使用这些默认的配置文件来进行配置
appsettings.jsonappsettings.Development.json
var env = builder.Environment;
// 通过环境变量 设置了 应用程序的基本路径
builder.Configuration.SetBasePath(env.ContentRootPath);
builder.Configuration.AddJsonFile("appsettings.json",optional: false,reloadOnChange:true);
builder.Configuration.AddJsonFile($"appsettings.{env.EnvironmentName}.json",optional:true,reloadOnChange:true);
// 一种最佳实践,始终做最后的覆盖
builder.Configuration.AddEnvironmentVariables();
IConfigurationBuilder有很多扩展方法,可以添加更多的配置。
- XML
- INI配置文件
- 内存配置
甚至,当有其他配置提供程序时:
- 读取YAML文件
- 数据库值
类型化配置
类型化配置,使用INI文件。而不是通过
IConfiguration逐键读取配置
- 定义待配置的类型
public class AppSettings {
public int Foo { get; set; }
public string Bar { get; set; }
}
- 填充这个类
//ASP.NET Core 5.0 以前
//在Startup.cs的ConfigureServices()方法中填充
//ASP.NET Core 5.0
services.Configure<AppSettings>(Configuration.GetSection("AppSettings"));
// ASP.NET Core 6.0 迷你API
builder.Services.Configure<AppSettings>(builder.Configuration.GetSection("AppSettings"));
- 设置类型的值
- 要读取设置,需要先在
appsettings.json文件中配置AppSettings部分 - 否则值将为
null或未设置
//appsettings.json
{
"Logging": { "LogLevel": { "Default": "Warning" }},
"AllowedHosts": "*",
"AppSettings": {"Foo": 123,"Bar": "Bar"}
}
类型化配置 也可以在依赖注入容器中 注册为服务。在程序的任何地方使用。
IOptions是AppSettings类型的包装器Value属性包含AppSettings类的实例,包括配置文件中的值。
using Microsoft.Extensions.Options;
// ...
public class HomeController : Controller {
private readonly AppSettings _options;
public HomeController(IOptions<AppSettings> options)
{
_options = options.Value;
}
public IActionResult Index()
{
ViewData["Message"] = _options.Bar;
return View();
}
}
可以为每个配置 创建 不同的类型。
- 一般情况下,一个类型足矣
- 但有时,为了需要,会将配置划分为不同的类