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

sam*_*cow 14 .net swagger swashbuckle asp.net-core

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

NotSupportedException:用于操作的不明确的HTTP方法 - EBisAPI.Controllers._class.HandleError(EBisAPI).动作需要为Swagger提供明确的HttpMethod绑定

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

jps*_*jps 33

当方法在控制器中声明为public但没有REST属性时,可能会发生这种情况.将方法更改为受保护可能会解决此问题.

我之前看过这个错误,通常错误消息指向罪魁祸首: EBisAPI.Controllers._class.HandleError

我猜你的基类HandleError是一种public方法,对吧?将其更改为protected并重试.

  • 哇 - 不知道我是怎么错过的,甚至复制并粘贴错误 - 谢谢 (2认同)

Gui*_*ira 11

我通过使用正确的HTTP属性装饰错误中提到的方法来解决此错误。例如:[HttpGet]

这段代码抛出错误:

public object Get()
{
    MongoDbContext dbContext = new MongoDbContext();
    return new {
        API = true,
        Database = dbContext.Status()
    };
}
Run Code Online (Sandbox Code Playgroud)

此代码有效:

[HttpGet]
public object Get()
{
    MongoDbContext dbContext = new MongoDbContext();
    return new {
        API = true,
        Database = dbContext.Status()
    };
}
Run Code Online (Sandbox Code Playgroud)


tot*_*nho 9

Clean方法可以使用数据注释 [NonAction]来将您的方法设置为受保护.


Moh*_*ast 5

正如我在“Swashbuckle 未创建 swagger.json 文件”中提到的:

  1. 使用显式 Http 方法装饰所有操作,例如[HttpGet("xxx")],[HttpPost("xxx")]或 ... 而不是[Route("xxx")]
  2. 使用[NoAction]Attribute装饰控制器中的公共方法。

  • 为什么要在控制器中使用公共方法而无需操作? (2认同)