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

ASP.NET Core Web API读取appsettings异常:ArgumentNullException及集合取值失败

问题诊断与修复

核心错误

你的VideoRepository构造函数存在关键逻辑错误:直接通过类名AppDatabaseSettings访问Value,而非使用注入的IOptions<AppDatabaseSettings>实例kickboxerDatabaseSettings。AppDatabaseSettings是普通实体类,本身不存在Value属性——这里混淆了IOptions<T>的Value属性与配置类本身。这种错误会导致读取的是配置类的默认空值(仅在其他正确使用注入实例的场景中,UsersCollectionName能被正确赋值,所以看起来它可正常工作)。

修复步骤

1. 修正VideoRepository构造函数代码

将构造函数中所有AppDatabaseSettings.Value替换为注入实例的Value属性:

public class VideoRepository
{
    private readonly IMongoCollection<Video> _videoCollection;

    public VideoRepository(IOptions<AppDatabaseSettings> kickboxerDatabaseSettings)
    {
        var settings = kickboxerDatabaseSettings.Value;
        var mongoClient = new MongoClient(settings.ConnectionString);
        var mongoDatabase = mongoClient.GetDatabase(settings.DatabaseName);
        _videoCollection = mongoDatabase.GetCollection<Video>(settings.VideosCollectionName);
    }

    public async Task Post(Video video)
    {
        await _videoCollection.InsertOneAsync(video);
    }
}

2. 确认Program.cs中的配置绑定逻辑

确保已在Program.cs中完成配置绑定与依赖注入注册:

var builder = WebApplication.CreateBuilder(args);

// 将AppDatabase节点配置绑定到AppDatabaseSettings
builder.Services.Configure<AppDatabaseSettings>(
    builder.Configuration.GetSection("AppDatabase"));

// 注册VideoRepository到DI容器
builder.Services.AddScoped<VideoRepository>();

// 其他中间件与服务配置...

var app = builder.Build();
// ...

3. 调试验证配置绑定有效性

若修复后仍有问题,可在构造函数中添加调试输出,确认配置是否正确加载:

public VideoRepository(IOptions<AppDatabaseSettings> kickboxerDatabaseSettings)
{
    var settings = kickboxerDatabaseSettings.Value;
    // 控制台输出调试信息
    Console.WriteLine($"ConnectionString: {settings.ConnectionString}");
    Console.WriteLine($"VideosCollectionName: {settings.VideosCollectionName}");
    
    var mongoClient = new MongoClient(settings.ConnectionString);
    var mongoDatabase = mongoClient.GetDatabase(settings.DatabaseName);
    _videoCollection = mongoDatabase.GetCollection<Video>(settings.VideosCollectionName);
}

补充说明

  • 你使用的null!是空值原谅运算符,仅用于告诉编译器属性不会为null,但配置绑定失败时,属性仍会是空字符串或null,这也是触发ArgumentNullException的原因——MongoDB相关方法不接受空字符串参数。
  • ASP.NET Core默认会根据环境自动加载对应配置文件,只要未修改默认配置逻辑,appsettings.Development.json会被正常加载。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 00:17:08