【问题标题】:Optional WebAPI routing parameters with Swagger documentation带有 Swagger 文档的可选 WebAPI 路由参数
【发布时间】:2017-02-28 15:39:02
【问题描述】:

我有一个在属性中定义路由的 WebAPI 方法,有一个强制参数和一个可选参数:

    [HttpGet]
    [Route("api/ChargeCard/{cif}/{feeScheme=null}")]
    [ResponseType(typeof(ChargeCardRoot))]
    public IHttpActionResult Get(string cif, string feeScheme, ChargeCardRequestMode mode = ChargeCardRequestMode.Basic)
    {

我还使用 Swashbuckle / Swagger 来生成文档。问题是 Swagger 总是将我的可选参数标记为必需。

将可选参数表示法更改为:

    [Route("api/ChargeCard/{cif}/{feeScheme?}")]

使这两个参数都像必需的一样,它也不会使 Swagger 将其显示为可选。

有没有办法使用 Swagger 为可选参数生成正确的文档?

【问题讨论】:

    标签: c# asp.net-web-api routes swagger


    【解决方案1】:

    如果您重载方法,Swashbuckle 将生成两个不同的 Swagger 端点。一种方法有参数,另一种方法没有,并使用“缺失”参数的默认值调用第一个方法。如果您使用诸如 HyprLinkr 之类的东西来生成 HATEOAS 链接,这也有一个优势,因为您不能在表达式中包含可选参数。

    [HttpGet]
    [Route("api/ChargeCard/{cif}/{feeScheme}")]
    [ResponseType(typeof(ChargeCardRoot))]
    public IHttpActionResult Get(string cif, string feeScheme, ChargeCardRequestMode mode = ChargeCardRequestMode.Basic)
    {
        // working code
    }
    
    [HttpGet]
    [Route("api/ChargeCard/{cif}")]
    [ResponseType(typeof(ChargeCardRoot))]
    public IHttpActionResult Get(string cif, string feeScheme)
    {
        return Get(cif, feeScheme, ChargeRequestMode.Basic);
    }
    

    希望对您有所帮助。

    【讨论】:

    • 谢谢,差不多了 :) 我只需要从重载方法中删除 feeScheme 参数,并在其中调用另一个 null 值,这使得 Swashbucle 生成两个端点,现在都可以测试在 Swagger 页面上。但是,这更像是一种解决方法,而不是解决方案。这是否意味着 Swagger 根本无法将路由参数显示为可选?
    • 我不相信您可以按照您尝试的方式指定可选参数。问题实际上是路线,因为它并不真正支持这种方式的可选参数。参数是路由真的和方法的参数是分开的。
    猜你喜欢
    • 2023-03-03
    • 2016-10-12
    • 2011-01-09
    • 2013-09-10
    • 1970-01-01
    • 1970-01-01
    • 2016-08-01
    • 2013-12-07
    相关资源
    最近更新 更多