2015-12-11 2 views
1

Я только начал использовать этот инструмент, чтобы определить API и выстроить код веб-API в .NET. https://visualstudiogallery.msdn.microsoft.com/cadcb820-762c-4514-9817-884b7558aaa9 Я добавил договор RAML, который создает кучу контроллеров и контрактов в решении. Я также запускаю функцию для включения вывода метаданных. Когда я перехожу на страницу/raml, я вижу спецификацию API, которая великолепна. Тем не менее, я получаю две версии всего, и я не уверен, что менять, чтобы предотвратить это. Например, в моем файле .raml у меня есть ресурс, называемый «операторами». С помощью этих инструментов создается контроллер под названием «OperatorsController». BaseUri в файле определения .raml: http://localhost:51366/api/, а MapHttpRoute функции WebApiConfig.Register задается с помощью routeTemplate api/{controller}/{id}. На странице/raml есть запись для/bookings AND запись для/api/Bookings. Первый, похоже, исходит из спецификации .raml, а второй из созданного BookingsController. enter image description hereПредотвращение дублирования записей для документации RAML с использованием инструментов RAML для расширения .NET

Любая идея, как предотвратить duplicates.It 'это первый раз, когда я играл с созданием API, так что я мог бы быть что-то очевидное здесь ...

+0

Я не вижу какой-либо очевидный параметр конфигурации, которые могли бы контролировать это здесь: https://github.com/mulesoft-labs/raml-dotnet- tools # customizing-the-generated-raml Итак, вы можете попробовать сообщить об этом здесь: https://github.com/mulesoft-labs/raml-dotnet-tools/issues и посмотреть, что должны сказать разработчики. –

ответ

1

метаданные (динамически генерируемый отсутствует raml) захватывает все ваши маршруты. Ваш WebApi настроен таким образом, что у вас есть два разных маршрута для каждого действия/контроллера. Это отражается на консоли api (картинка в вашем вопросе).

Контроллеры, созданные с помощью команды «Добавить команду RAML ...», используют маршрутизацию атрибутов атрибутов RoutePrefix и Route в сгенерированном контроллере и действиях.

У вас также есть маршрут по умолчанию "api/{controller}/{id}".

Взгляните на WebApiConfig.cs и вы найдете это:

config.MapHttpAttributeRoutes(); 

config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 

Так, например, OpertatorsController/Get получает вызывается этими двумя различными путями:

/операторов (используя маршрут сконфигурированных с помощью атрибутов)

/API/операторов (с использованием «DefaultApi» маршрут

Если удалить «DefaultApi» маршрута вы только ч ave один маршрут для каждого действия и, таким образом, дублирование будет уходить.

Примечание: BaseUri не используются вообще для метаданных

+0

Большое спасибо @Pedro. Я не достаточно хорошо разбирался в двух типах маршрутизации. Я изменю маршрутизацию атрибутов на свои api-контроллеры, чтобы они были похожи на routeTemplate (иначе они будут сталкиваться с моими MVC-маршрутами) и удалите MappHttpRoute, как вы предлагаете. – PabloInNZ

Смежные вопросы