swagger .net core API模糊HTTP动作调试

时间:2017-12-14 21:15:20

标签: .net asp.net-core swagger swashbuckle

使用.net Core 2 API实现Swashbuckle / Swagger我在访问swagger.json时收到500错误:

  

NotSupportedException:用于操作的不明确的HTTP方法 -   EBisAPI.Controllers._class.HandleError(EBisAPI)。行动需要一个   Swagger的显式HttpMethod绑定

我已经浏览了所有控制器,并在每个控制器的所有公共方法上看到显式路由。有没有办法确定哪种方法抛出模糊的路由错误?

7 个答案:

答案 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"所提到的:

  1. 使用诸如[HttpGet("xxx")][HttpPost("xxx")]或...之类的显式Http方法而不是[Route("xxx")]装饰所有动作。
  2. 使用[NoAction]属性装饰控制器中的公共方法。

答案 5 :(得分:0)

我遇到了同样的问题,并且是因为我完成了Ok()方法的覆盖,返回了OkObjectResult。解决方案是将其从公共更改为受保护

答案 6 :(得分:0)

我尝试了不同的解决方案,但是对我有用的是如上所述在属性内添加路由。 I.E:[HttpPost("yourRoute/create")]的问题之一是我有2个get方法,所以我改变了它们的名称,并按照我所说的将路由添加到了属性中。