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

.Net使用MongoDB.Driver通过SSL连接MongoDB时抛出Value cannot be null错误

问题根因

Value cannot be null. (Parameter 'source') 报错的直接触发原因是MongoDB .NET驱动在校验SslSettings配置的客户端证书集合时,传入的参数类型/配置不符合驱动要求,导致内部Linq的Cast操作接收到null值抛出异常。

修复步骤
  • 修正MongoCredential构造参数
    MongoCredential.CreateMongoCRCredential的第一个参数为认证源数据库名,不是MongoDB服务地址端口,你的连接字符串中authSource配置为admin,修改为:
MongoCredential creds = MongoCredential.CreateMongoCRCredential("admin", "user", "pass");
  • 调整客户端证书类型
    你当前使用的X509Certificate基类不符合驱动要求,SslSettings.ClientCertificates需要传入IEnumerable<X509Certificate2>类型,同时添加密钥存储标志避免.NET Core下的证书权限问题:
var clientCertificate = new List<X509Certificate2>()
{ 
  new X509Certificate2(
    "Path\\...\\mysite_com.pfx", 
    "privateKeyPassword", 
    X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable
  ) 
};
  • 补全MongoClientSettings必要配置
    手动指定MongoDB服务地址,显式开启SSL开关,避免配置遗漏:
settingz.Server = new MongoServerAddress("localmongo", 12345);
settingz.UseSsl = true;
  • 简化SslSettings配置
    移除多余的ClientCertificateSelectionCallback回调,该配置和你直接传入的客户端证书集合冲突,容易引发内部校验异常:
settingz.SslSettings = new SslSettings()
{
    CheckCertificateRevocation = false,
    EnabledSslProtocols = System.Security.Authentication.SslProtocols.Tls12,
    ClientCertificates = clientCertificate,
    ServerCertificateValidationCallback = (sender, certificate, chain, errors) => true
};
  • 检查进程证书访问权限
    确认运行API的进程对pfx证书文件有读取权限,本地IIS Express调试时需要给IIS_IUSRS用户分配证书所在路径的读取权限。

  • 避免重复初始化MongoClient
    确认全局只有一处构造MongoClient的逻辑,不要同时存在用连接字符串构造和用MongoClientSettings构造的代码,避免集群配置校验冲突。

验证方法

修改完成后先单独测试证书加载逻辑,确认X509Certificate2实例化成功不为null,再启动API测试MongoDB连接即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 17:15:03