ASP.NET 核心 API 的 GET 请求中的可选参数不使用 Swagger

Optional Parameter in GET Requests for ASP.NET Core API not Working with Swagger

我正在处理一个如下所示的端点:

GET {{url}}/v1.0/GroupsInfo/StuffToGet/1/2/hea

其中 2 个整数是特定 ID,末尾的文本是搜索词。

我希望最后一个参数(搜索文本)是可选的。我已经使用以下方法工作,但它在 Swagger 中不是强制性的:

[Route("[action]/{catId:int}/{dogId:int}/{search?}")]
public IActionResult StuffToGet(int catId, int dogId, string search)
{
    // do stuff
}

Swagger 忽略了路由约束中 Search 参数末尾的问号。

这是一个已知问题,还是我需要修改一些自定义代码才能让 Swagger 识别该可选标志?

创建两个具有相似路线的动作,但其中一个没有搜索参数。两个动作调用相同的业务层代码。

你的变体会起作用,但如果你对 swagger 有疑问,试试这个

[Route("[action]/{catId:int}/{dogId:int}]
[Route("[action]/{catId:int}/{dogId:int}/{search}")]
public IActionResult StuffToGet(int catId, int dogId, string search)
{
    // do stuff
}

或者这个


[Route("StuffToGet/{catId:int}/{dogId:int}/{search}")]
public IActionResult StuffToGet(int catId, int dogId, string search)
{
    // do stuff
}
[Route("StaffToGet/{catId:int}/{dogId:int}]
public IActionResult StuffToGet(int catId, int dogId)
{
   return StuffToGet(catId, dogId,string.empty);
}