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

返回Ok响应时遇AsyncCursor已释放对象异常求助

问题原因

你这段代码的问题出在AsyncCursor的使用逻辑上:当调用users.ToList().Count时,已经将游标枚举完毕并自动释放了资源,后续再调用users.FirstAsync()时,就会访问一个已经被释放的对象,从而触发Cannot access a disposed object异常。

解决方案

有两种简单的修复方式:

方式一:直接获取首个文档(推荐)

不用先判断数量,直接用FirstOrDefaultAsync获取第一个匹配的文档,不存在则返回null,代码更简洁高效:

var user = await _userCollection.Find(user => user.Phone == loginUser.phone).FirstOrDefaultAsync();

if (user != null)
{
    string token = new ShirtDeck.Utils.JwtUtil(configuration).GenerateJWT(user);
    return Ok(new { user = user, token = token });
}
// 此处处理用户不存在的逻辑

方式二:提前将结果存入列表

如果需要先确认是否有匹配数据,可以先把游标结果转成列表保存,后续直接操作这个列表:

var usersList = await _userCollection.FindAsync(user => user.Phone == loginUser.phone).ToListAsync();

if (usersList.Count > 0)
{
    var user = usersList.First();
    string token = new ShirtDeck.Utils.JwtUtil(configuration).GenerateJWT(user);
    return Ok(new { user = user, token = token });
}
// 此处处理用户不存在的逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 18:20:32