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

调用GraphQL接口出现Cannot read property 'concat' of null错误排查

问题:.NET序列化GraphQL请求体后调用接口报"Cannot read property 'concat' of null"错误

问题背景

我在Postman中使用以下GraphQL查询作为请求体调用接口时可正常运行:

query Sessions(
  $appID: ID!,
  $newestCursor: String,
  $oldestCursor: String,
  $cursor: String,
  $date: Float,
  $filters: [SessionFilter!],
  $groupedFilters: [[SessionFilter!]!],
  $retentionMonths: Int,
  $disablePagination: Boolean,
  $sourceAppID: String,
  $exactCount: Boolean) {
    app(id: $appID, sourceAppID: $sourceAppID) {
      appID
      sessionInfo (
        newestCursor: $newestCursor,
        oldestCursor: $oldestCursor,
        cursor: $cursor, 
        date: $date, 
        filters: $filters,
        groupedFilters: $groupedFilters,
        retentionMonths: $retentionMonths,
        disablePagination: $disablePagination,
        exactCount: $exactCount) {
          sessions {
            browserInfo {
              href
              useragent
              platform
              __typename
            }
            deviceInfo {
              deviceName
              deviceType
              manufacturer
              release
              __typename
            }
            user {
              name
              email
              userID
              isAnonymous
              __typename
            }
            location {
              country
              region
              city
              ip
              __typename 
            }
            activity {
              videoTime
              start
              end
              href
              __typename
            }
            date
            id
            duration
            eventCount
            hasIntercomShow
            hasZendeskShow
            isDeleted
            __typename
          }
          cursor
          newestCursor
          nextCursor
          prevCursor
          sessionOffset
          sessionCount
          isEstimatedCount
          scanInfo {
            count
            total
            horizon
            __typename
          }
          __typename
        }
        __typename
      }
    }

但通过.NET代码将包含该查询的requestModel序列化为JSON后发起请求,收到以下错误:

"errors": [
    {
      "message": "Cannot read property 'concat' of null",
      "locations": [
        {
          "line": 4,
          "column": 5
        }
      ],
      "path": [
        "app",
        "sessionInfo"
      ],
      "extensions": {
        "code": "INTERNAL_SERVER_ERROR"
      }
    }
  ]

我的.NET代码如下:

var jsonSettings = new JsonSerializerSettings();
jsonSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
var body = JsonConvert.SerializeObject(requestModel, jsonSettings);       //requestModel contains the query
var content = new StringContent(body, Encoding.UTF8, "application/json");
var response = await SendRequest(method, uri, content, token);

问题分析

这个错误的核心原因是:GraphQL服务端在处理filters或groupedFilters这类数组类型的参数时,收到了null值,而服务端内部代码尝试对null执行concat操作,从而抛出异常。

Postman中能正常运行,是因为你可能没有显式传递这两个参数(服务端会使用默认的空数组),或者传递了空数组[];但.NET序列化时,如果requestModel中对应的filters或groupedFilters属性为null,会直接序列化为null并发送给服务端,这不符合服务端的预期。

解决方案

方案1:初始化数组参数为空数组

在构建requestModel时,确保filters和groupedFilters属性即使没有过滤条件,也初始化为空数组,而不是null:

// 示例:初始化requestModel的数组属性
requestModel.Filters = new List<SessionFilter>();
requestModel.GroupedFilters = new List<List<SessionFilter>>();

方案2:修改JSON序列化配置,忽略null值属性

调整序列化设置,让Newtonsoft.Json忽略值为null的属性,这样这些参数不会出现在请求体中,服务端会使用默认的空数组:

var jsonSettings = new JsonSerializerSettings();
jsonSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
// 添加这行配置,忽略null值的属性
jsonSettings.NullValueHandling = NullValueHandling.Ignore;
var body = JsonConvert.SerializeObject(requestModel, jsonSettings);
var content = new StringContent(body, Encoding.UTF8, "application/json");
var response = await SendRequest(method, uri, content, token);

方案3:对比Postman请求体,确保结构一致

打印.NET序列化后的body内容,和Postman中正常请求的请求体做对比,确认参数的格式(比如数组参数是null还是空数组,或者是否被省略),保证两者结构完全一致。

内容的提问来源于stack exchange,提问作者Fakhar Ahmad Rasul

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 03:35:01