Swagger 使用问题之--Failed to load API definition 解决

现象

解决

1.首先检查Controller的所有接口是否有添加Attribute Eg:[HttpPost][HttpGet]
2.若Atrrribute均存在,则查询详细错误信息,根据提示

可发现详细错误信息置于/swagger/v1/swagger.json
于是我们直接打开 http://localhost:port/swagger/v1/swagger.json 查看错误详细信息 针对具体信息具体解决
一般就是缺少包 缺少依赖 缺啥补啥 问题解决

报错--Conflicting method/path combination 解决

原因

controller层的路由存在冲突 swagger要求每个操作都具有唯一的对应路径 我们的controller层存在一个路径对应多张操作的情况

解决
  • 首先检查 controller的头部 属性 尤其是route
    报错头部
    [ApiController]
    [Route("[controller]")] //**默认webapi模板创建时只有一个方法 所以没有[action]  当我们增加多个操作时 便会报路径冲突**

修改后

    [ApiController]
    [Route("[controller]/[action]")] 
  • 保证我们每个操作头 要有 [HttpGet] [[HttpPost]等
  • 上诉调整后如果还有问题 进行如下调整
    • .NET Core 3.1 and .NET 5 在** Startup.cs**
    public void ConfigureServices(IServiceCollection services)
    {
    ...
        services.AddSwaggerGen(c => {
            c.ResolveConflictingActions(apiDescriptions => apiDescriptions.First());
            c.IgnoreObsoleteActions();
            c.IgnoreObsoleteProperties();
            c.CustomSchemaIds(type => type.FullName);
            });
            ...
    }
    
    • .NET 6+ 在Program.cs
    builder.Services.AddSwaggerGen(c => {
        c.ResolveConflictingActions(apiDescriptions => apiDescriptions.First());
        c.IgnoreObsoleteActions();
        c.IgnoreObsoleteProperties();
        c.CustomSchemaIds(type => type.FullName);
    });
    

参见:https://docs.telerik.com/reporting/knowledge-base/conflicting-actions-error-in-swagger-generation-net-core

posted @ 2021-09-07 17:14  C余L小R鱼  阅读(8017)  评论(0编辑  收藏  举报