FastEndpoints项目中MongoDB.Entities InitAsync自动加端口致连接失败
解决MongoDB.Entities InitAsync自动追加端口导致连接失败的问题
核心原因
MongoDB.Entities的DB.InitAsync(string dbName, string connectionString)重载会默认检查连接字符串是否包含端口,若未检测到则自动追加:27017。但MongoDB Atlas的云端连接字符串(尤其是mongodb+srv协议)无需手动指定端口,单节点格式的连接字符串会被错误拼接,最终触发无效端点异常。
解决方案
方法1:使用MongoClientSettings重载(推荐)
直接通过MongoClientSettings初始化,绕过自动追加端口的逻辑:
// 从MongoDB Atlas复制的标准srv连接字符串 var connString = "mongodb+srv://<MyUserName>:<MyPassword>@olaxxwh.mongodb.net/?authSource=admin&retryWrites=true&w=majority"; var clientSettings = MongoClientSettings.FromConnectionString(connString); await DB.InitAsync(myDbName, clientSettings);
方法2:使用完整多节点连接字符串(非srv协议)
若使用普通mongodb协议,复制Atlas提供的完整多节点连接字符串(已包含每个节点的端口),这样InitAsync不会额外追加端口:
// 示例完整连接字符串(从Atlas复制) var connString = "mongodb://<MyUserName>:<MyPassword>@olaxxwh-shard-00-00.mongodb.net:27017,olaxxwh-shard-00-01.mongodb.net:27017,olaxxwh-shard-00-02.mongodb.net:27017/?ssl=true&replicaSet=atlas-xxxx-shard-0&authSource=admin&retryWrites=true&w=majority"; await DB.InitAsync(myDbName, connString);
额外排查点
- 确认MongoDB Atlas的IP白名单已添加当前机器的公网IP,或临时允许所有IP(测试后记得改回)
- 检查连接字符串中的用户名、密码是否正确,特殊字符需做URL编码(比如密码里的@、&等)
- 确保项目安装了最新版本的MongoDB.Entities包,避免旧版本的已知bug
内容的提问来源于stack exchange,提问作者Woodman
相关产品推荐
相关产品推荐

