Swashbuckle,多个API版本和虚拟目录



我正在考虑使用Swashbuckle/Swagger记录我的WebAPI解决方案。开发人员门户将像https://myapi.com/一样,而版本的API为https://myapi.com/v1/users。

URL的版本部分映射到虚拟目录,其中包含V1的二进制文件和配置文件。当版本2发票时,我们在根下创建一个新的虚拟目录,因此现在我们拥有https://myapi.com/v2/users/some_new_endpoint_not_in_in_v1。这意味着除了用于错误的文件外,不需要触摸旧版本的任何二进制文件,这降低了某些开发人员意外地向我们的客户向后兼容的可能性。

但是,我看不到如何配置swashbuckle来查看这些虚拟目录,以使控制器/操作和XML注释进行解析。乘法配置选项似乎更瞄准的是将所有受支持版本都投入一组二进制文件(通过名称或控制器名称)而不是通过将它们分开为单独的过程的人。

关于我如何屈服于我的意志,有什么建议吗?我是否应该将swashbuckle安装到单个虚拟目录中作为单个API版本,那么文档将变成https://myapi.com/v1/swagger之类的东西?然后,我的门户将进行必要的工作以揭示不同的API版本。

update

我确实尝试了后一种方法,至少对于文档,它可以正常工作。问题在于,Swagger Spec的URL然后变成https://myapi.com/v1/swagger/docs/v1,我宁愿在URL中没有第二个V1。不幸的是,swaashbuckle至少希望版本编号处于相对路径中,而不是在基本网址中。

拥有这些可以工作:

  • API网站根部的Swagger UI(与Swashbuckle无关),
  • 版本的多个虚拟目录(" V1"," V2" ...)

实现这一目标:

  • 自定义 DiscoveryPaths Swagger UI JavaScript中的数组看起来像下面,并添加"/spec"后缀(或任何适合您的后缀,因为SwashBuckle没有用空版本值处理c.SingleApiVersion):
var currentUrl = 'https://myapi.com/';
window.swashbuckleConfig = {
    rootUrl: currentUrl,
    discoveryPaths: arrayFrom('v1/swagger/docs/spec|v2/swagger/docs/spec'),
    booleanValues: arrayFrom('true|false'),
    validatorUrl: stringOrNullFrom('null'),
    // other settings ommitted for brevity.
    oAuth2AdditionalQueryStringParams: JSON.parse('{}')
};
  • 从您的Web API子应用程序中删除c.EnableSwaggerUi

最新更新