为ASP.NET Web API应用程序生成特定于版本的帮助文档页面

时间:2013-02-02 23:49:51

标签: asp.net-web-api asp.net-web-api-routing

我正在使用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实现

2 个答案:

答案 0 :(得分:1)

查看此答案Get Help page works with Api Versioning

确保您已配置版本控制权,并且需要从项目XXXX.Api.v1项目中获取文档XML文件,并将其放在XXXX.Api项目的bin文件夹中。

答案 1 :(得分:0)

不幸的是,ApiExplorer不支持重复的控制器名称。因此,通过以这种方式实现控制器版本控制,您的(或包代码)不能很好地与系统一起使用。

考虑另一个实际更改控制器名称的替代方案(是的,您必须实现自己的解决方案,但老实说它并不复杂)。例如,使版本成为控制器名称本身的一部分(而不是其名称空间)。

e.g。 Ver1_ProcuctsController

现在这些将开始显示在您的帮助页面上,并且由于帮助页面只是内容包,您可以更改逻辑以使以verxxx_开头的名称变异。