swagger.net核心API针对操作错误的不明确HTTP方法

swagger.net核心API针对操作错误的不明确HTTP方法,.net,asp.net-core,swagger,swashbuckle,.net,Asp.net Core,Swagger,Swashbuckle,使用.net Core 2 API实现Swashback/Swagger我现在在访问Swagger.json时收到500个错误: NotSupportedException:用于操作的不明确HTTP方法- EBisAPI.Controllers.\u class.HandleError(EBisAPI)。行动需要 用于Swagger的显式HttpMethod绑定 我已经浏览了所有的控制器,看到了每个控制器的所有公共方法上的显式路由。有没有办法确定哪种方法抛出不明确的路由错误 当一个方法在控制器中

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

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


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

当一个方法在控制器中声明为public,但没有REST属性时,就会发生这种情况。将方法更改为protected可以解决此问题

我以前见过这个错误,错误消息通常指向罪犯:
EBisAPI.Controllers.\u class.HandleError


我猜
HandleError
是基类中的
public
方法,对吗?将其更改为受保护的,然后重试。

干净的方法是使用数据注释
[NoAction]
将您的方法设置为受保护的。

类似于您可以使用的方法

[ApiExplorerSettings(IgnoreApi=true)]

(From)

我通过用正确的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()
    };
}
正如我在会议上提到的:

  • 使用显式Http方法装饰所有操作,如
    [HttpGet(“xxx”)]
    [HttpPost(“xxx”)]
    或。。。而不是
    [路线(“xxx”)]
  • 使用
    [NoAction]
    属性装饰控制器中的公共方法

  • 我也遇到了同样的问题,因为我重写了Ok()方法,返回了一个OkObjectResult。解决方案是将其从public更改为protected

    我尝试了不同的解决方案,但对我有效的是在上述属性中添加路由。例如:
    [HttpPost(“yourRoute/create”)]
    其中一个问题是我有两个get方法,所以我更改了它们的名称,并如我所说将路由添加到属性中。

    哇-我不确定我怎么会错过这一点,即使复制ans粘贴错误-我也面临类似的问题,但当我将API端点转换为受保护的方法时,它发布了一个404@devC:当然,端点方法必须是公共的。在sammarcows的例子中,它是一个助手方法,控制器不打算公开它。对,在我的例子中,我有一个额外的[Route]注释,这导致了招摇过市失败。我解决了它。我的问题是因为我不小心注释掉了我的
    [HttpGet]
    属性。Oops。为什么您希望在控制器中使用公共方法而不使用操作?对于代码重用,您可能希望使用在操作中多次调用且不在其他控制器或其他位置使用的方法@如果它不在其他控制器或其他地方使用,您将其标记为private?是的,您也可以使用private。但是,如果您使用的是未用作操作的公共方法,则我们必须使用
    [NoAction]
    对其进行修饰。这个案例很少使用,但在我还没有遇到的特殊情况下,您可能需要它。(例如,使用反射来反射公共方法或…。@Jorn.BeyersYes!我必须在我的一条路线中添加IgnoreApi=true。然后大摇大摆的ui很高兴。