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

jQuery调用返回Task<ActionResult<List<ApiObject>>>的GET接口报500错误

问题根因

从你提供的错误栈可直接定位核心问题:System.InvalidOperationException: Sequence contains more than one element 是调用LINQ的Single()方法时,目标序列匹配到了多条数据触发的异常,错误出现在SiteController.cs第167行、Select方法的委托逻辑中。
你当前贴出的Select赋值代码是简化版本,实际你在给ApiObject某个字段赋值时,存在未贴出的a.关联属性.Single()类的逻辑。

为什么Angular调用正常、jQuery调用异常

两种请求的上下文不一致,导致数据库查询返回的数据集不同:

  • Angular发送请求时会自动携带站点的身份认证凭证(Cookie/Token),后端识别用户身份后,按权限过滤得到的数据集刚好符合Single()的调用要求
  • 你写的jQuery ajax默认没有携带身份凭证,后端识别为无权限/未登录用户,查询得到的关联数据出现重复,触发Single()报错
    另外你现有的jQuery事件绑定写法也存在问题,直接写on(ajax, "click")会因为找不到ajax变量触发语法错误。

修复方案

第一步:修正jQuery请求代码

补充身份凭证携带逻辑,修正事件绑定写法:

$("#ajax").click(function(event) { 
    alert('ajax');
    $.ajax({ 
        type: "GET",
        data: {SiteId: 8},
        dataType: "json",
        // 携带跨域/同域身份凭证,和Angular请求上下文保持一致
        xhrFields: { withCredentials: true },
        url: "https://localhost:44310/api/site/search",
        success: function(data){        
            alert(JSON.stringify(data));
        },
        error: function(xhr) {
            console.error(xhr.responseText);
        }
    });
});

第二步:修复后端逻辑鲁棒性

找到SiteController.cs第167行的Single()调用,根据业务场景调整:

  • 若业务允许多条数据取第一条,替换为FirstOrDefault()并补充空值判断
  • 若业务要求该序列必须仅有一条数据,先补充Distinct()去重逻辑,再替换为SingleOrDefault(),同时添加异常兜底处理

临时排查验证方法

在控制器Search方法入口添加日志,分别打印Angular请求和jQuery请求的User.Identity.IsAuthenticated、传入的SiteId值,可快速确认两者的请求上下文差异。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 21:06:03