我正在使用WebAPI Versioning package通过X-Api-Header使用“VersionHeaderVersionedControllerSelector”对我的API进行版本控制。我还使用Microsoft.AspNet.WebApi.HelpPage自动生成API文档。 为了使控制器版本标识能够工作,它们需要使用VersionXYZ命名空间作为命名空间中的后缀,以便“VersionHeaderVersionedControllerSelector”能够将请求路由到适当的控制器版本,如下所示:
namespace WEBAPI.Api.Controllers.Version1
{ public class ProductsController : ApiController {} }
namespace WEBAPI.Api.Controllers.Version2
{ public class ProductsController : ApiController {} }
这可以按预期工作,但是当我查看生成的帮助页面时,ApiDescription包含ID中名称空间的“VersionXYZ”后缀( GETapi / Version1.Products )和RelativePath( api / Version1.Products )属性。 理想情况下,我想要的是拥有一个顶级帮助页面,其中只有API版本号和钻孔将以正常方式显示API,即ApiDescription.ID = GETapi / Products和ApiDescription.RelativePath = api / Products
有没有办法使用Out of the Box API实现这一目标,或者我需要推出自己的ApiExplorer实现
答案 0 :(得分:1)
查看此答案Get Help page works with Api Versioning
确保您已配置版本控制权,并且需要从项目XXXX.Api.v1项目中获取文档XML文件,并将其放在XXXX.Api项目的bin文件夹中。
答案 1 :(得分:0)
不幸的是,ApiExplorer不支持重复的控制器名称。因此,通过以这种方式实现控制器版本控制,您的(或包代码)不能很好地与系统一起使用。
考虑另一个实际更改控制器名称的替代方案(是的,您必须实现自己的解决方案,但老实说它并不复杂)。例如,使版本成为控制器名称本身的一部分(而不是其名称空间)。
e.g。 Ver1_ProcuctsController
现在这些将开始显示在您的帮助页面上,并且由于帮助页面只是内容包,您可以更改逻辑以使以verxxx_开头的名称变异。