Swagger 未正确处理 .net core 可选参数

问题描述 投票:0回答:2

我有一个 Web API 控制器方法,它有一个可选参数,如下所示:

[HttpGet]
[Route("getOrder/{price?}")]
public async Task<IEnumerable<Product>> Get(int? price = null)
{
}

但是,在运行 API 时,Swagger UI 根据需要显示参数,并且我无法在没有参数的情况下调用该方法。这是为什么?我该如何解决它,以便将其作为可选参数进行处理?

c# swagger asp.net-core-webapi swagger-ui
2个回答
0
投票

如果您不想修改任何 SwaggerGen 配置,则 @CodingMytra 建议的替代方法可能是将 GET Web API 控制器分为两种不同的方法:一种是在路线中需要价格,另一种是在路线中需要价格可选的查询参数

举个例子:

// endpoint #1 with required route param
[HttpGet]
[Route("Products/getOrder/{price}")]
public async Task<IEnumerable<Product>> Get1(int price)
{
    //... 
}

// endpoint #2 with optional params passed in via query string
[HttpGet]
[Route("Products/getOrder")]
public async Task<IEnumerable<Product>> Get2([FromQuery]int price)
{
    //...
}

这将生成以下 Swagger 文档: Products/getOrder/{price}Products/getOrder

使用查询参数的好处是您可以在将来减少或扩展搜索条件,而无需更改端点路由。


0
投票

试试这个:

[HttpGet("getOrder")]
public async Task<IActionResult> Get(int? price = null)
{
}
© www.soinside.com 2019 - 2024. All rights reserved.