.NET 8.0从appsettings.json读取连接字符串的方法及疑问解答
问题解答
1. JSON配置正确性与ProviderName说明
你当前的ConnectionStrings配置结构不符合ASP.NET Core默认读取规范。默认情况下,GetConnectionString方法期望ConnectionStrings节点下的子项是字符串类型的连接字符串,而非嵌套对象。
正确的标准配置格式:
"ConnectionStrings": { "DefaultConnection": "Data Source=(local);Initial Catalog=MyDB;Integrated Security=SSPI;" }
关于ProviderName:
- 若使用Entity Framework Core,无需在此配置ProviderName,直接在
AddDbContext时通过UseSqlServer等方法指定即可。 - 若需单独存储ProviderName,可将其放在配置的独立节点中,比如:
"DatabaseSettings": { "DefaultConnection": "Data Source=(local);Initial Catalog=MyDB;Integrated Security=SSPI;", "ProviderName": "System.Data.SqlClient" }
之后通过绑定自定义模型来读取该值。
2. Program.cs中依赖注入代码的位置
在.NET 6及以上的顶级语句模板中,依赖注入配置要放在**WebApplication.CreateBuilder创建完成后,Build方法调用前**,也就是builder.Services的配置区块内。
3. GetConnectionString方法不存在的解决
编译器提示方法不存在,通常是两个原因:缺少必要命名空间引用,或配置结构不符合默认读取规则。
完整解决方案代码
修正后的appsettings.json
{ "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning" } }, "ConnectionStrings": { "DefaultConnection": "Data Source=(local);Initial Catalog=MyDB;Integrated Security=SSPI;" }, "AllowedHosts": "*" }
完整Program.cs(含DI配置与连接字符串读取)
using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Configuration; // 必须添加此命名空间才能使用GetConnectionString var builder = WebApplication.CreateBuilder(args); // 依赖注入配置区域:在此添加你的服务 builder.Services.AddControllersWithViews(); // 示例:注册EF Core数据库上下文 builder.Services.AddDbContext<MyDbContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection"))); var app = builder.Build(); // 中间件配置 if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Home/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); app.Run();
关键说明
- 必须添加
using Microsoft.Extensions.Configuration;命名空间,GetConnectionString方法才会被识别。 - 确保
ConnectionStrings节点是标准键值对结构(子项为字符串值),而非嵌套对象。
内容的提问来源于stack exchange,提问作者Scott Pendleton
相关产品推荐
相关产品推荐

