ASP.NET Core 6+ 启动阶段如何访问Configuration读取appsettings配置
.NET 6+ 获取Configuration与环境对象方案
在.NET 6及以上版本的顶级语句Program.cs模式中,你创建的WebApplicationBuilder实例本身就内置了Configuration和Environment属性,无需额外注入,直接访问这两个属性即可拿到对应的IConfiguration、IWebHostEnvironment对象,用法和之前Startup.cs中的对应对象完全一致。
你当前报错的修复方法
你报错的原因是没有从builder实例上获取Configuration属性,直接将报错行的Configuration.GetConnectionString修改为builder.Configuration.GetConnectionString即可,同时你重复注册了FestifyContext,需要删掉多余的空DbContext注册行。
修复后的核心代码段如下:
using Festify.Database; using Microsoft.EntityFrameworkCore; var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddRazorPages(); // 删掉原来多余的 builder.Services.AddDbContext<FestifyContext>(); 行 // 直接从builder取Configuration builder.Services.AddDbContext<FestifyContext>(opt => opt.UseSqlServer( builder.Configuration.GetConnectionString("Festify"))); var app = builder.Build(); // 以下原有逻辑不变 // Configure the HTTP request pipeline. if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.MapRazorPages(); app.Run();
补充用法说明
- 读取其他配置:除连接字符串外,读取appsettings.json中其他节点的配置可以使用
builder.Configuration["配置节点名:子节点名"]的写法 - 环境对象获取:在调用
builder.Build()之前需要判断环境、获取根路径等操作,直接使用builder.Environment即可;Build完成后得到的app实例也暴露了Environment属性,你现有代码中app.Environment.IsDevelopment()就是正确用法 - 依赖注入使用:如果自定义服务需要使用
IConfiguration或IHostEnvironment,依然可以直接在服务构造函数中注入,框架已经默认将这两个实例注册到依赖注入容器中,无需额外配置。
内容的提问来源于stack exchange,提问作者VivekDev
相关产品推荐
相关产品推荐

