04 应用配置、日志、路由和静态文件
应用配置
在开发过程中,有些时候我们都会有配置应用的需求。
在 ASP.NET 中,我们一般使用 Web.config 来进行配置。但是在 ASP.NET Core 中 ,你们会发现 Web.config 已经没了,因为它被 appsettings.json 这个配置文件取代了。
基本用法
如果你还记得前两节课内容的话,你应该知道在主机创建后,服务容器里就已经为我们默认注册了一些服务,其中一个就是 IConfiguration 服务。
这个服务可以被注入到Startup类的构造函数中,它为我们提供了应用配置相关的服务。
假设有如下配置项:
// 键不区分大小写。例如,`ConnectionString` 和 `connectionstring` 被视为等效键。"ConnectionString": "data source=.;initial catalog=db;user id=sa","WebSetting": {
"WebName": "ASP.NET Core", "Title": "Hello Title", "Behavior": {
"IsCheckIp": true, "MaxConnection": 300 }}
首先,创建Startup类的构造函数,并注入 IConfiguration
private readonly IConfiguration _configuration;public Startup(IConfiguration configuration){
_configuration = configuration;}
之后,就可以在任何一个方法中使用它了
app.Run(async context => {
var connStrDefault = _configuration.GetConnectionString("default"); var connStr = _configuration["connectionString"]; var title = _configuration["WebSetting:Title"]; var isCheckIp = _configuration["WebSetting:Behavior.IsCheckIp"]; await context.Response.WriteAsync($"{connStrDefault}\r connStr \r title \r isCheckIp"); });
绑定配置模型对象
使用字符串键名获取配置值很不优雅,也容易出错。我们可以把配置项绑定到对象。
首先,创建配置项结构对应的配置模型。
public class Behavior{
public bool IsCheckIp { get; set; } public int MaxConnection { get; set; }}public class WebSetting{
public string WebName { get; set; } public string Title { get; set; } public Behavior Behavior { get; set; }}public class AppSetting{
public string ConnectionString { get; set; } public WebSetting WebSetting { get; set; }}
然后,创建配置模型对象,并通过 IConfiguration 服务绑定
// 全部绑定var appSetting = new AppSetting();_configuration.Bind(appSetting);// 部分绑定var behavior = new Behavior();_configuration.GetSection("Behavior").Bind(behavior);app.Run(async context => {
var connStrDefault = appSetting.ConnectionString; var title = appSetting.WebSetting.Title; var isCheckIp = appSetting.WebSetting.Behavior.IsCheckIp; var maxConnection = appSetting.WebSetting.Behavior.MaxConnection; await context.Response.WriteAsync($"{connStrDefault} \r {title} \r {isCheckIp} \r {maxConnection}"); });
注册配置选项
首先,在 ConfigureServices 方法中,注册AppSetting绑定的配置服务
services.Configure<AppSetting>(_configuration);
然后,在需要的地方利用参数把IOptions注入进来:
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, IOptions<AppSetting> appOptions){
app.Run(async context => {
var connStrDefault = appOptions.Value.ConnectionString; var title = appOptions.Value.WebSetting.Title; var isCh