原创

dotnet core配置swagger文档报错

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

访问/swagger/v1/swagger.json 报错信息如下

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即可。

[ApiController]
[Route("/")]
public class HomeController : Controller
{
    [HttpGet]
    public ResponseVm Index()
    {
        return ResponseVm.Success();
    }
}
正文到此结束
该篇文章的评论功能已被站长关闭