首页 文章

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

提问于
浏览
2

我正在寻找使用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版本 .

Update

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

1 回答

  • 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

相关问题