带有Swagger文档的可选WebAPI路由参数

时间:2017-02-28 15:39:02

标签: asp.net-web-api routing swagger

我有一个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为可选参数生成正确的文档?

1 个答案:

答案 0 :(得分:4)

如果重载方法,Swashbuckle将生成两个不同的Swagger端点。一种方法有参数,另一种方法没有,并用#34;缺少"的默认值调用第一种方法。参数。如果您使用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);
}

希望有所帮助。