【问题标题】:How do I handle path/route parameters in Swashbuckle?如何处理 Swashbuckle 中的路径/路由参数?
【发布时间】:2019-02-15 12:00:21
【问题描述】:

我有一个控制器,可以从路由中获取 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 查询此操作,但我的招摇文档如下所示:

如何让 Swashbuckle/Swagger 只显示一个 vehicleId 但仍保留 FluentValidation?

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

    • 感谢您的回复。我意识到这会解决它,但我也在使用 FluentValidation 并希望继续这样做。我已经更新了原来的问题。
    猜你喜欢
    • 1970-01-01
    • 2016-04-23
    • 2020-08-21
    • 2018-08-16
    • 2023-03-05
    • 2018-03-06
    • 1970-01-01
    • 2023-02-12
    • 2023-02-21
    相关资源
    最近更新 更多