使用.net Core 2 API实现Swashbuckle / Swagger我在访问swagger.json时收到500错误:
NotSupportedException:用于操作的不明确的HTTP方法 - EBisAPI.Controllers._class.HandleError(EBisAPI)。行动需要一个 Swagger的显式HttpMethod绑定
我已经浏览了所有控制器,并在每个控制器的所有公共方法上看到显式路由。有没有办法确定哪种方法抛出模糊的路由错误?
答案 0 :(得分:19)
当方法在控制器中声明为public但没有REST属性时,可能会发生这种情况。将方法更改为受保护可能会解决此问题。
我之前看到过这个错误,通常错误消息指向罪魁祸首:
EBisAPI.Controllers._class.HandleError
我猜HandleError
是你基类中的public
方法,对吗?将其更改为protected
,然后重试。
答案 1 :(得分:7)
Clean方法可能正在使用数据注释[NonAction]
来将您的方法设置为受保护。
答案 2 :(得分:7)
我通过使用正确的HTTP属性装饰错误中提到的方法来解决此错误。例如:[HttpGet]
此代码引发错误:
public object Get()
{
MongoDbContext dbContext = new MongoDbContext();
return new {
API = true,
Database = dbContext.Status()
};
}
此代码有效:
[HttpGet]
public object Get()
{
MongoDbContext dbContext = new MongoDbContext();
return new {
API = true,
Database = dbContext.Status()
};
}
答案 3 :(得分:3)
类似于totonho's answer,您可以使用
[ApiExplorerSettings(IgnoreApi=true)]
(来自https://github.com/domaindrivendev/Swashbuckle/issues/153)
答案 4 :(得分:0)
正如我在"Swashbuckle not creating swagger.json file"所提到的:
[HttpGet("xxx")]
,[HttpPost("xxx")]
或...之类的显式Http方法而不是[Route("xxx")]
装饰所有动作。[NoAction]
属性装饰控制器中的公共方法。答案 5 :(得分:0)
我遇到了同样的问题,并且是因为我完成了Ok()方法的覆盖,返回了OkObjectResult。解决方案是将其从公共更改为受保护
答案 6 :(得分:0)
我尝试了不同的解决方案,但是对我有用的是如上所述在属性内添加路由。 I.E:[HttpPost("yourRoute/create")]
的问题之一是我有2个get方法,所以我改变了它们的名称,并按照我所说的将路由添加到了属性中。