Создание страниц справки по конкретной версии для приложения ASP.NET Web API
Я использую WebAPI пакет версий для версии моего API с помощью X-Api-Header с помощью "VersionHeaderVersionedControllerSelector". Я также использую Microsoft.AspNet.WebApi.HelpPage для автоматической генерации документации для API.
Для того чтобы контроллер versionign работал, они должны быть помещены в namespaced с VersionXYZ как суффикс в пространстве имен так, чтобы "VersionHeaderVersionedControllerSelector" мог направлять запрос в соответствующую версию контроллера следующим образом:
namespace WEBAPI.Api.Controllers.Version1
{ public class ProductsController : ApiController {} }
namespace WEBAPI.Api.Controllers.Version2
{ public class ProductsController : ApiController {} }
Это работает по назначению, но когда я просматриваю созданные страницы справки, ApiDescription включает суффикс "VersionXYZ" из пространства имен в ID (GETapi/Version1.Products) и RelativePath ( api/Version1.Products).
В идеале, я бы хотел, чтобы страница справки верхнего уровня, в которой только номера версии API и сверление отображали API, обычным способом, т.е. ApiDescription.ID = GETapi/Products и ApiDescription.RelativePath = api/Products
Есть ли способ достичь этого, используя API-интерфейсы Out of the Box, или мне нужно будет внедрить мою собственную реализацию ApiExplorer
Ответы
Ответ 1
Посмотрите этот ответ Получить справочную страницу с Api Versioning
Убедитесь, что вы правильно настроили управление версиями, и вам нужно получить XML файл документации из проекта проекта XXXX.Api.v1 и поместить его в папку bin проекта XXXX.Api.
Ответ 2
К сожалению, ApiExplorer не поддерживает дублирующие имена контроллеров. Таким образом, реализуя таким образом управление версиями контроллера, ваш (или код пакета) не играет хорошо с системой.
Рассмотрим другую альтернативу, в которой вы фактически меняете имя контроллера (и да, вам придется реализовать свое собственное решение, но, честно говоря, это не тот комплекс). Например, сделайте версию частью самого имени контроллера (а не его пространства имен).
например. Ver1_ProcuctsController
Теперь они начнут отображаться на странице справки, а так как страница справки - это только пакет содержимого, вы можете изменить логику, чтобы имена, начинающиеся с того, что verxxx_ мутировали.