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

如何在自定义类读取appsettings.json连接字符串并修复SqlConnection异常

问题解答

一、在自定义类MyConnection中读取MyString连接字符串

步骤1:定义配置绑定类

创建与appsettings.json中配置对应的实体类,确保属性名匹配配置项:

public class MyConnection
{
    public string MyString { get; set; }
}

步骤2:在Program.cs中配置绑定与服务注册

在.NET 6+的启动文件中,完成配置绑定并将类注册为依赖注入服务:

var builder = WebApplication.CreateBuilder(args);

// 绑定appsettings中的MyString配置到MyConnection类
// 如果MyString嵌套在ConnectionStrings节点下,使用GetSection("ConnectionStrings:MyString")
builder.Services.Configure<MyConnection>(builder.Configuration.GetSection("MyString"));

// 注册MyConnection为可直接注入的单例服务(可选,也可直接注入IOptions<MyConnection>)
builder.Services.AddSingleton<MyConnection>(sp => 
    sp.GetRequiredService<IOptions<MyConnection>>().Value);

步骤3:在自定义类中注入读取连接字符串

通过构造函数注入配置实例,直接读取连接字符串:

public class MyConnection
{
    private readonly string _connectionString;

    // 方式1:注入IOptions<MyConnection>
    public MyConnection(IOptions<MyConnection> options)
    {
        _connectionString = options.Value.MyString;
    }

    // 方式2:直接注入绑定后的实例(需先完成步骤2的Singleton注册)
    // public MyConnection(MyConnection connectionConfig)
    // {
    //     _connectionString = connectionConfig.MyString;
    // }

    // 提供获取数据库连接的方法
    public SqlConnection GetDbConnection()
    {
        return new SqlConnection(_connectionString);
    }
}

二、修复控制器中SqlConnection的异常

你的控制器代码存在3个核心问题,修改方案如下:

  1. 原构造函数未给私有字段_sqlConnection赋值,导致字段始终为null;
  2. .NET Core/.NET 5+环境下不推荐使用System.Configuration.ConfigurationManager,应通过依赖注入获取配置;
  3. 字段初始化阶段配置尚未加载,直接创建SqlConnection会触发空引用异常,需移至方法内按需创建。

修改后的控制器代码

public class CRUDController : ControllerBase
{
    private readonly MyConnection _myConnection;
    private readonly ILogger<CRUDController> _logger;

    // 通过依赖注入获取MyConnection实例
    public CRUDController(ILogger<CRUDController> logger, MyConnection myConnection)
    {
        _logger = logger;
        _myConnection = myConnection;
    }

    // 在业务方法内按需创建SqlConnection,并用using自动释放资源
    [HttpGet]
    public IActionResult ExampleAction()
    {
        using (SqlConnection con = _myConnection.GetDbConnection())
        {
            con.Open();
            // 执行数据库操作逻辑
        }
        return Ok();
    }

    // SearchRequest按需初始化,若需复用可改为方法内创建或注入
    SearchRequest sr = new SearchRequest();
}

补充:确保appsettings.json配置格式正确

示例配置(根据实际结构调整):

{
  "MyString": "Server=你的服务器地址;Database=数据库名;Uid=用户名;Pwd=密码;"
  // 若使用ConnectionStrings节点:
  // "ConnectionStrings": {
  //   "MyString": "Server=你的服务器地址;Database=数据库名;Uid=用户名;Pwd=密码;"
  // }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 19:04:06