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

Swagger提示‘Failed to load API definition’的原因排查(含代码示例)

问题原因

你遇到的Swagger加载失败,核心原因是两个GET接口的路由模板完全重复,ASP.NET Core路由系统无法区分这两个端点,Swagger在生成API定义时检测到路由冲突,因此抛出加载失败的错误。

具体来说,两个接口都标记了[HttpGet("")],最终的路由都是api/Hospitalized,而且都是GET请求。当请求这个路由时,框架无法判断应该调用哪个方法,Swagger也无法生成清晰的API文档,导致报错。

解决方法

可以通过以下几种方式修复这个问题:

方法1:给不同接口设置差异化路由模板

给其中一个接口添加独特的路由片段,让两个接口的路由地址区分开:

[Route("api/[controller]")]
[ApiController] 
public class HospitalizedController : ControllerBase
{
    // 路由:api/Hospitalized
    [HttpGet("")]
    public string Get(string MedicID)
    {
        // 原有逻辑
    }

    // 路由:api/Hospitalized/with-patient
    [HttpGet("with-patient")]
    public string GetWithPatient(string MedicID, string PatientID)
    {
        // 原有逻辑
    }
}

方法2:将PatientID设为可选参数,合并成一个方法

如果两个接口的逻辑可以合并,把PatientID设为可选参数,这样只用一个路由就能处理两种场景:

[Route("api/[controller]")]
[ApiController] 
public class HospitalizedController : ControllerBase
{
    [HttpGet("")]
    public string Get(string MedicID, string PatientID = null)
    {
        string connString = gsUtils.GetDbConnectionString();
        if (PatientID == null)
        {
            // 仅MedicID的逻辑
        }
        else
        {
            // 同时有MedicID和PatientID的逻辑
        }
    }
}

方法3:使用路径参数区分路由

如果参数适合作为路径的一部分,可以将参数嵌入路由模板:

[Route("api/[controller]")]
[ApiController] 
public class HospitalizedController : ControllerBase
{
    // 路由:api/Hospitalized/{MedicID}
    [HttpGet("{MedicID}")]
    public string Get(string MedicID)
    {
        // 原有逻辑
    }

    // 路由:api/Hospitalized/{MedicID}/{PatientID}
    [HttpGet("{MedicID}/{PatientID}")]
    public string Get(string MedicID, string PatientID)
    {
        // 原有逻辑
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 15:25:50