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

时间:2016-06-20 12:45:24

标签: asp.net-web-api swashbuckle

我正在使用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_v1。这意味着除了错误修正之外,不需要触及任何旧版本的二进制文件,这可以降低某些开发人员意外破坏我们客户的向后兼容性的可能性。

但是,我无法看到如何配置Swashbuckle来查看这些虚拟目录以获取要解析的控制器/操作和XML注释。 MultipleApiVersions配置选项似乎更多地针对那些将所有支持的版本放入一组二进制文件(通过命名空间或控制器名称),而不是将它们分成单独的进程的人。

关于如何将Swashbuckle按照我的意愿弯曲的任何建议?我应该将Swashbuckle作为单个API版本安装到各个虚拟目录中,因此文档会变成类似https://myapi.com/v1/swagger的内容吗?然后,我的门户网站将进行必要的工作以公开不同的API版本。

更新

我确实尝试过后一种方法,至少对于文档来说,它运行正常。问题是,然后Swagger规范的URL变为https://myapi.com/v1/swagger/docs/v1,我宁愿在URL中没有第二个v1。不幸的是,Swaashbuckle至少希望版本号在相对路径中,而不是在基本URL中。

1 个答案:

答案 0 :(得分:2)

让这些工作:

    位于API网站根目录的
  • Swagger UI(与Swashbuckle无关),
  • 您的版本的多个虚拟目录(“v1”,“v2”...)

实现这一目标:

  • Swagger UI中的自定义 discoveryPaths 数组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