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

ASP.NET Core QR码外键查询Video接口始终返回空列表问题

问题定位

你的ASP.NET Core QR码匹配视频搜索接口始终返回空列表,是以下几个代码问题共同导致的:

  • 路由参数绑定失败:路由模板定义的占位符是{Qr}(大写Q开头),但Action方法的入参名是小写qr,ASP.NET Core路由系统按名称匹配参数时,大小写不一致会导致参数无法正确绑定,qr变量始终为null,最终查询条件实际是匹配Machine_Qr字段为null的记录,自然查不到有效数据。
  • EF查询未实际执行:你定义的_context.videos.Where(...)只是生成了查询表达式,没有调用ToListAsync()等执行方法,且方法标记了async却没有使用await关键字,既不符合异步编程规范,也无法正确拿到数据库查询结果。
  • 空值判断逻辑无效:EF Core的Where()方法永远不会返回null,即使没有匹配数据也会返回空的可枚举对象,你写的if(query != null)判断永远为真,完全起不到空值分支的作用。
  • 隐藏问题:如果接口需要返回Video关联的Machine、Coache导航属性数据,当前代码没有使用Include()预加载关联数据,返回结果里的这两个属性会始终为null。
修复方案
  1. 统一路由占位符和方法入参的名称,修正参数绑定问题
  2. 补充参数非空校验,避免无效查询
  3. 为异步方法添加await关键字,调用ToListAsync()实际执行数据库查询
  4. 按需添加Include()加载关联导航属性

修复后的控制器代码如下:

[HttpGet("{qr}")] // 路由占位符和入参名统一为小写qr
public async Task<IEnumerable<Video>> Search(string qr)
{
    // 空参数直接返回空结果
    if (string.IsNullOrWhiteSpace(qr))
    {
        return Enumerable.Empty<Video>();
    }

    // 执行数据库查询,按需放开Include加载关联数据
    var matchVideos = await _context.videos
        // .Include(v => v.machine)
        // .Include(v => v.Coache)
        .Where(v => v.Machine_Qr == qr)
        .ToListAsync();

    return matchVideos;
}
补充排查项

如果改完代码还是返回空,可以检查两个点:

  • 确认数据库连接字符串配置正确,没有连接到无数据的测试库/空库
  • 核对传入的QR码值和数据库中Machine_Qr字段存储的值完全一致,注意排查前后空格、大小写差异(部分数据库排序规则默认区分大小写)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 14:39:20