迁移到 VS 2015 后,Swashbuckle 显示没有任何方法

Swashbuckle shows no method after migration to VS 2015

我已经 ASP.NET WebApi 配置了 Swashbuckle 以显示招摇 ui。我从 IIS Express 的 VS 中 运行 它。 解决方案是在 VS 2013 中,并且运行良好。迁移到 VS 2015 后,swagger 没有显示任何方法。没有错误,只是空列表。返回的响应是:

{"swagger":"2.0","info":{"version":"v4","title":"Swashbuckle Dummy API V4"},"host":"localhost:35622","schemes":["http"],"paths":{},"definitions":{}}

我检查了文档中的疑难解答章节,但基于它配置没问题。 接下来我可以尝试什么?

我找到问题了。我简单描述一下情况: 我们已经对 API 进行了版本控制,并使用自定义 ControllerSelector(派生自 DefaultHttpControllerSelector)来 select 控制器的正确版本。 (API 版本取自 Http header。)Controllers 文件夹中有子文件夹(如 V1V2, ..) 和控制器 classes 放置在这些子文件夹中。

通常,对于文档生成,它使用 ApiExplorer class 由 DefaultHttpControllerSelector 提供,它在内部管理 HttpControllerDescriptors 的列表,这些列表由控制器名称(没有'Controller' 后缀)。当它构建这个列表时,它会检查控制器名称是否已经添加到列表中,如果是,它不仅不会添加另一个,还会删除已经添加的那个。 在我们的例子中,这意味着没有用于具有多个版本的控制器的描述符。

我能够通过在我们的自定义控制器 select 中覆盖 IHttpControllerSelector.GetControllerMapping() 或者并传入以版本为前缀的控制器名称来修复它,这也是一个有效的路由。我们的自定义 ControllerSelector 也接受传入的版本 URL.