在给一个新的dotnet core项目配置swagger文档的时候,编译没问题访问接口文档 /swagger 出现错误 Failed to load API definition.使用的是Swashbuckle.AspNetCore包。以前一直没出现过这个错误。好在F12查看到swagger的结果报500错误了,才找到原因。

访问/swagger/v1/swagger.json 报错信息如下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| System.NotSupportedException: Ambiguous HTTP method for action - DEMO.Controllers.HomeController.Index (TianGui.Web.WebApi). Actions require an explicit HttpMethod binding for Swagger/OpenAPI 3.0 at Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.GenerateOperations(IEnumerable`1 apiDescriptions, SchemaRepository schemaRepository) at Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.GeneratePaths(IEnumerable`1 apiDescriptions, SchemaRepository schemaRepository) at Swashbuckle.AspNetCore.SwaggerGen.SwaggerGenerator.GetSwagger(String documentName, String host, String basePath) at Swashbuckle.AspNetCore.Swagger.SwaggerMiddleware.Invoke(HttpContext httpContext, ISwaggerProvider swaggerProvider) at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)
HEADERS ======= Accept: application/json,*/* Accept-Encoding: gzip, deflate, br Accept-Language: zh-CN,zh;q=0.9,zh-TW;q=0.8 Cache-Control: no-cache Connection: keep-alive Cookie: JSESSIONID=6a8d2980-37a5-459d-ad2c-d804425e567d; ASP.NET_SessionId=x11uh1hk1z3yy3erjji12i0i Host: localhost:52764 Pragma: no-cache Referer: http://localhost:52764/swagger/index.html User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.89 Safari/537.36 DNT: 1 Sec-Fetch-Site: same-origin Sec-Fetch-Mode: cors Sec-Fetch-Dest: empty
|
看报错得知 action HomeController.Index 未明确标记 HttpMethod,这个action可以访问是因为全局路由所以可以访问。看到这个报错直接在报错对应的action上增加HttpMethod即可。
1 2 3 4 5 6 7 8 9 10
| [ApiController] [Route("/")] public class HomeController : Controller { [HttpGet] public ResponseVm Index() { return ResponseVm.Success(); } }
|