我有一个控制器,我从路线获取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文档看起来像这样:
我怎样才能让Swashbuckle / Swagger只向我展示一个vehicleId
但仍然保持FluentValidation?
我正在使用Swashbuckle 5.6和.Net Framework 4.6.2。
在我看来,动作方法签名有问题。 URL中的参数应存在于操作方法参数中。
此外,如果您只想在查询字符串中使用lang,那么它也应该作为参数出现在操作中。
请注意,如果在action参数中指定object,则其所有属性都将形成查询字符串。
所以,你的行动方法应该如下:
[HttpGet]
[Route("{vehicleId}")]
public InfoDto GetInfo(int vehicleId, [FromUri] string lang)
{
return ...;
}
这应该可以帮助您解决问题。