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

Tom*_*zki 3 c# routes asp.net-web-api swagger

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

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

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

将可选参数符号更改为:

    [Route("api/ChargeCard/{cif}/{feeScheme?}")]
Run Code Online (Sandbox Code Playgroud)

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

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

Mic*_*nox 5

如果您重载您的方法,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);
}
Run Code Online (Sandbox Code Playgroud)

希望有帮助。