VS2022中使用ConfigurationManager无法访问ASP.NET Core Web API的web.config
问题解决:ASP.NET Core中ConfigurationManager读取连接字符串抛出NullReferenceException
错误原因
你遇到的NullReferenceException是因为ConfigurationManager.ConnectionStrings["db"]返回了null,根本找不到对应的连接字符串。核心问题是:ASP.NET Core的配置体系和传统.NET Framework的ASP.NET完全不同,System.Configuration.ConfigurationManager是针对老框架设计的,默认不会读取ASP.NET Core项目中web.config里的<connectionStrings>节点——ASP.NET Core里web.config主要用于IIS相关配置,应用级配置默认用appsettings.json。
推荐解决方案(符合ASP.NET Core最佳实践)
1. 改造类库适配ASP.NET Core配置系统
把类库中的静态类改成依赖注入模式,依赖IConfiguration接口:
// 类库中的SqlDataAccess类 public class SqlDataAccess { private readonly IConfiguration _configuration; // 通过构造函数注入IConfiguration public SqlDataAccess(IConfiguration configuration) { _configuration = configuration; } public string GetConnectionString(string name) { // 使用ASP.NET Core原生方法读取连接字符串 return _configuration.GetConnectionString(name); } }
2. 在API项目中注册服务
在Program.cs里把SqlDataAccess注册到依赖注入容器:
var builder = WebApplication.CreateBuilder(args); // 添加控制器服务 builder.Services.AddControllers(); // 注册SqlDataAccess builder.Services.AddScoped<SqlDataAccess>(); var app = builder.Build(); app.UseAuthorization(); app.MapControllers(); app.Run();
3. 迁移连接字符串到appsettings.json
把web.config里的连接字符串移到API项目的appsettings.json中:
{ "ConnectionStrings": { "db": "你的连接字符串内容" } }
4. 修改Controller注入使用
[ApiController] [Route("[controller]")] public class WeatherForecastController : ControllerBase { private readonly SqlDataAccess _sqlDataAccess; // 注入SqlDataAccess public WeatherForecastController(SqlDataAccess sqlDataAccess) { _sqlDataAccess = sqlDataAccess; } [HttpGet] public string Get() { string connString = _sqlDataAccess.GetConnectionString("db"); return connString; } }
备选方案(强行使用ConfigurationManager,不推荐)
如果一定要保留ConfigurationManager的用法,需要做以下操作:
- 在API项目中也安装
System.Configuration.ConfigurationManagerNuGet包(不能只装类库); - 右键API项目的
web.config→ 属性,设置“复制到输出目录”为如果较新则复制或始终复制; - 确保
web.config的<connectionStrings>节点格式正确,没有拼写错误。
但这种方式违背ASP.NET Core的设计理念,后续维护会有隐患,不建议使用。
内容的提问来源于stack exchange,提问作者Kroi
相关产品推荐
相关产品推荐

