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

C#中按ShedID筛选Fuel数据无法获取全部详情的技术求助

问题解决:按ShedID获取对应Fuel数据列表

你的代码核心问题是没有执行MongoDB查询并获取实际数据:Find(filter)返回的是IFindFluent查询对象,而非实际的Fuel数据集合,直接返回这个对象会导致Json序列化异常。

修复后的代码

[HttpGet("shed/{id}")]
public async Task<IActionResult> Get(int id)
{
    var dbClient = new MongoClient(_configuration.GetConnectionString("FuelQueueAppConnection"));
    var collection = dbClient.GetDatabase("FuelQueue").GetCollection<Fuel>("Fuel");

    // 用强类型属性构建过滤器,避免字符串字段名写错
    var filter = Builders<Fuel>.Filter.Eq(f => f.shedId, id);
    
    // 执行查询并获取数据列表
    var fuelList = await collection.Find(filter).ToListAsync();

    if (!fuelList.Any())
    {
        return NotFound($"未找到ShedID为{id}的Fuel数据");
    }

    return Ok(fuelList);
}

关键优化点说明

  • 执行查询:调用ToListAsync()(异步)或ToList()(同步)执行查询,获取实际的Fuel数据列表,这样Json序列化才能得到正确的数组结果。
  • 异步方法:改用async Task<IActionResult>替代JsonResult,符合ASP.NET Core异步编程最佳实践,避免阻塞线程。
  • 字段匹配校验:如果数据库中字段是ShedID(大写),而你的Fuel类属性是shedId(小写),需要给属性添加映射特性:
    public class Fuel
    {
        [BsonElement("ShedID")]
        public int shedId { get; set; }
        // 其他属性...
    }
    
  • 单例MongoClient优化:MongoClient是线程安全的,建议在Program.cs中注册为单例,避免重复创建连接:
    builder.Services.AddSingleton<IMongoClient>(sp => 
        new MongoClient(builder.Configuration.GetConnectionString("FuelQueueAppConnection")));
    
    之后在控制器中注入使用即可,不用每次请求都实例化。
  • 错误处理:添加NotFound返回,当没有匹配数据时返回404状态码,更符合REST接口规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 06:15:37