我有一个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为可选参数生成正确的文档?
2条答案
按热度按时间fnvucqvd1#
如果你重载了你的方法,Swashbuckle会生成两个不同的Swagger端点。一个方法有参数,另一个没有,并调用第一个方法的默认值为“missing”参数。这也有一个好处,如果你使用类似HyprLinkr的东西来生成HATEOAS链接,这会更容易,因为你不能在表达式中有可选参数。
希望能有所帮助。
63lcw9qa2#
就Swagger而言,您可以指定可选参数,方法是从路由中省略它们,并在方法签名中为参数声明指定“string?”,如下所示:
但是请注意,这些参数将不再作为路由的一部分进行传递。可选参数将作为附加到路由的查询参数进行传递,如下所示:
如果您采用这种方法,还需要将此行添加到文件的顶部,以防止Visual Studio移除“?”并将其替换为[CanBeNull]属性: