迁移到 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 文件夹中有子文件夹(如 V1、V2, ..) 和控制器 classes 放置在这些子文件夹中。
通常,对于文档生成,它使用 ApiExplorer
class 由 DefaultHttpControllerSelector
提供,它在内部管理 HttpControllerDescriptors
的列表,这些列表由控制器名称(没有'Controller' 后缀)。当它构建这个列表时,它会检查控制器名称是否已经添加到列表中,如果是,它不仅不会添加另一个,还会删除已经添加的那个。
在我们的例子中,这意味着没有用于具有多个版本的控制器的描述符。
我能够通过在我们的自定义控制器 select 中覆盖 IHttpControllerSelector.GetControllerMapping()
或者并传入以版本为前缀的控制器名称来修复它,这也是一个有效的路由。我们的自定义 ControllerSelector 也接受传入的版本 URL.
我已经 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 文件夹中有子文件夹(如 V1、V2, ..) 和控制器 classes 放置在这些子文件夹中。
通常,对于文档生成,它使用 ApiExplorer
class 由 DefaultHttpControllerSelector
提供,它在内部管理 HttpControllerDescriptors
的列表,这些列表由控制器名称(没有'Controller' 后缀)。当它构建这个列表时,它会检查控制器名称是否已经添加到列表中,如果是,它不仅不会添加另一个,还会删除已经添加的那个。
在我们的例子中,这意味着没有用于具有多个版本的控制器的描述符。
我能够通过在我们的自定义控制器 select 中覆盖 IHttpControllerSelector.GetControllerMapping()
或者并传入以版本为前缀的控制器名称来修复它,这也是一个有效的路由。我们的自定义 ControllerSelector 也接受传入的版本 URL.