Swagger 使用问题之--Failed to load API definition 解决
现象
- 参照使用教程 https://www.cnblogs.com/Alicia-meng/p/14417403.html 添加Controller的接口后 运行 报错 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); });