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

Swagger传入多个查询字符串时报TypeError: NetworkError资源获取错误

问题表现
  • Swagger调试接口时,同时传入2个可选查询字符串参数会抛出TypeError: NetworkError when attempting to fetch resource错误
  • 涉事接口共3个参数:1个路由必填参数,2个可选查询参数,仅两个可选查询参数同时传入时才会触发报错
  • 完全相同的请求参数在Postman调试、直接通过浏览器地址栏发起请求时均可正常运行,无报错
涉事后端C# WebAPI代码
[HttpGet("{customerId}/campaign/ads")]
public IActionResult GetAds([FromRoute] long customerId, [FromQuery] long? campaignId, [FromQuery] long? adGroupId)
{
    var serviceResponse = _campaignService.GetAds(new GetAdsServiceRequest
    {
        CustomerId = customerId,
        CampaignId = campaignId,
        AdGroupId = adGroupId
    });

    if (null == serviceResponse || serviceResponse.Count <= 0) return StatusCode((int)HttpStatusCode.NotFound);

    return StatusCode((int)HttpStatusCode.OK, serviceResponse.Select(googleAdsRow => new GetAdsHttpResponse
    {
        CustomerId = customerId,
        CampaignId = googleAdsRow.Campaign.Id,
        AdGroupId = googleAdsRow.AdGroup.Id,
        AdGroupAdAdId = googleAdsRow.AdGroupAd.Ad.Id,
        AdGroupAdAdName = googleAdsRow.AdGroupAd.Ad.Name,
        AdGroupAdAdType = googleAdsRow.AdGroupAd.Ad.Type.ToString()
    }));
}
根因定位

这个问题是.NET平台下Swagger组件(Swashbuckle.AspNetCore)低版本的已知bug:当接口存在多个值类型的可空查询参数时,Swagger UI拼接请求URL的逻辑存在缺陷,会生成格式非法的请求地址,导致浏览器fetch请求直接抛出网络错误,请求根本没有发送到后端服务,因此Postman、直接浏览器访问这类不会触发Swagger URL拼接逻辑的场景完全正常。

修复方案
  • 优先升级NuGet包Swashbuckle.AspNetCore到最新稳定版本,官方已经在后续迭代中修复了多可空查询参数的URL拼接问题,绝大多数场景升级后即可直接恢复正常。
  • 如果升级包后问题仍存在,显式给两个可空查询参数指定默认值、明确查询参数名称,避免OpenAPI schema生成歧义,修改后的接口签名参考如下:
[HttpGet("{customerId}/campaign/ads")]
[Produces("application/json")]
public IActionResult GetAds(
    [FromRoute] long customerId,
    [FromQuery(Name = "campaignId")] long? campaignId = null,
    [FromQuery(Name = "adGroupId")] long? adGroupId = null)
{
    // 原有业务逻辑无需改动
    var serviceResponse = _campaignService.GetAds(new GetAdsServiceRequest
    {
        CustomerId = customerId,
        CampaignId = campaignId,
        AdGroupId = adGroupId
    });

    if (null == serviceResponse || serviceResponse.Count <= 0) return NotFound();

    return Ok(serviceResponse.Select(googleAdsRow => new GetAdsHttpResponse
    {
        CustomerId = customerId,
        CampaignId = googleAdsRow.Campaign.Id,
        AdGroupId = googleAdsRow.AdGroup.Id,
        AdGroupAdAdId = googleAdsRow.AdGroupAd.Ad.Id,
        AdGroupAdAdName = googleAdsRow.AdGroupAd.Ad.Name,
        AdGroupAdAdType = googleAdsRow.AdGroupAd.Ad.Type.ToString()
    }));
}
  • 排查验证:修复后可打开浏览器开发者工具(F12)的网络面板,查看Swagger发出的请求URL格式是否为标准的/{customerId}/campaign/ads?campaignId=xxx&adGroupId=xxx格式,确认无多余字符、路径参数错位问题即可。

内容的提问来源于stack exchange,提问作者omer.canyucel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 16:48:52