You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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的用法,需要做以下操作:

  1. 在API项目中也安装System.Configuration.ConfigurationManager NuGet包(不能只装类库);
  2. 右键API项目的web.config → 属性,设置“复制到输出目录”为如果较新则复制或始终复制;
  3. 确保web.config的<connectionStrings>节点格式正确,没有拼写错误。

但这种方式违背ASP.NET Core的设计理念,后续维护会有隐患,不建议使用。

内容的提问来源于stack exchange,提问作者Kroi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 01:40:27