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

时间:2019-02-15 12:00:21

标签: c# asp.net-mvc swagger swashbuckle

我有一个控制器,可以从路由中获取ID。

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

VehicleDetailsRequest对象如下所示(验证器来自FluentValidation):

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

    public string Lang { get; set; }
}

我可以使用http://localhost/controller/123?lang=sv来查询此操作,但是我的招摇文档如下:

Swagger documentation with duplicated parameters

如何让Swashbuckle / Swagger只给我看一个vehicleId,但仍然保留FluentValidation?

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

1 个答案:

答案 0 :(得分:0)

我认为操作方法签名有问题。 URL的参数应存在于操作方法参数中。

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

请注意,如果您在操作参数中指定对象,则其所有属性都将构成查询字符串。

因此,您的操作方法应如下所示:

# Add locale [en] if not in URL
RewriteCond %{REQUEST_URI} !^/[a-z]{2}/
RewriteRule ^(.*) /en/$1 [R=301,L]

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