配置ASP.NET Core 6.0

375 阅读2分钟

摘录自: Link

在哪里 配置?

  • ASP.NET Core 2.0 之前,配置在Startup.cs
  • ASP.NET Core 3.1 - ASP.NET Core 5.0, 配置在Program.csWebHostBuilder
  • 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.json
  • appsettings.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逐键读取配置

  1. 定义待配置的类型
public class AppSettings {     
    public int Foo { get; set; }     
    public string Bar { get; set; }
}
  1. 填充这个类
//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"));
  1. 设置类型的值
  • 要读取设置,需要先在appsettings.json文件中配置AppSettings部分
  • 否则值将为null或未设置
//appsettings.json
{
    "Logging": { "LogLevel": { "Default": "Warning" }},
    "AllowedHosts": "*", 
    "AppSettings": {"Foo": 123,"Bar": "Bar"} 
}

类型化配置 也可以在依赖注入容器中 注册为服务。在程序的任何地方使用。

  • IOptionsAppSettings类型的包装器
  • 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(); 
	}
}

可以为每个配置 创建 不同的类型。

  • 一般情况下,一个类型足矣
  • 但有时,为了需要,会将配置划分为不同的类