如何处理Swashbuckle中的路径/路由参数?

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

我有一个控制器,我从路线获取ID。

[HttpGet]
[Route("{vehicleId}")]
public InfoDto GetInfo([FromUri] VehicleDetailsRequest request)
{
   return ...;
}

VehicleDetailsRequest对象看起来像这样(Validator来自FluentValidation):

[Validator(typeof(VehicleDetailsRequestValidator))]
public class VehicleDetailsRequest
{
    public int VehicleId { get; set; }

    public string Lang { get; set; }
}

我可以像http://localhost/controller/123?lang=sv一样查询此操作,但我的swagger文档看起来像这样:

Swagger documentation with duplicated parameters

我怎样才能让Swashbuckle / Swagger只向我展示一个vehicleId但仍然保持FluentValidation?

我正在使用Swashbuckle 5.6和.Net Framework 4.6.2。

c# asp.net-mvc swagger swashbuckle
1个回答
0
投票

在我看来,动作方法签名有问题。 URL中的参数应存在于操作方法参数中。

此外,如果您只想在查询字符串中使用lang,那么它也应该作为参数出现在操作中。

请注意,如果在action参数中指定object,则其所有属性都将形成查询字符串。

所以,你的行动方法应该如下:

[HttpGet]
[Route("{vehicleId}")]
public InfoDto GetInfo(int vehicleId, [FromUri] string lang)
{
   return ...;
}

这应该可以帮助您解决问题。

© www.soinside.com 2019 - 2024. All rights reserved.