ПредишенСледващото

Създаване Swashbuckle (перчене) за WebAPI 8

  • 11.12.16 06:22 •
  • ETman •
  • • # 317338
  • • Habrahabr
  • 11 •
  • 2700

- като Forbes, само по-добре.

Закрепете към проекта


Swashbuckle - NuGet този пакет е вграден в информацията за автоматично генерирано WebAPI възел в съответствие с OpenAPI на спецификация. Тази спецификация е де факто стандарт, тъй като след като WSDL. За да инсталирате, тя отнема четири прости стъпки.

Нюансите на Deploe WebAPI


Когато deploe WebAPI в производството може да е проблем с факта, че XML файл липсва. монтаж на издаване не ги включи по подразбиране, но можете да получите около това, като редактирате csproj на файла. Необходимо е да се добави към проекта PropertyGroup фалшив и файлът ще остане в хамбар /.

Друг проблем причаква за тези, които се крият своята API за прокси. Решението не е универсален, но в моя случай работи. Proxy добавя заглавията да rekvest, в която ние се учим как да бъдем endponitov URL за клиента.

Пример Откриване URL за прокси

Добавянето на кодовете на отговор

Примери за състоянието на добавяне кодове

За мързеливите има възможност за добавяне на общ код (например 400 (BadRequest) или 401 (неоторизиран)) непосредствено до всички методи. За това, за да се реализира IOperationFilter интерфейс и да се регистрирате в класа с c.OperationFilter().

Нанесете по метода на пример, за да добавите списък с кодове

Вграден браузър


Добавянето им към конфигурация WebAPI, браузърът ще ви подкани да въведете данни за идентификация по време на искането. Сложността тук е, че тези данни не губят толкова лесно и бързо, как да влезе.


Друг метод е по-удобно в това отношение, тъй като Той предвижда специална форма. За да активирате вградения формата удостоверяване е необходимо да се направи пакет, както следва:

Прилагане на метода Приложете филтъра

Добавянето на този параметър

Например JS изпращане на заглавията в Swagger

Ние работим със задължителното Heder

Endpointy с натоварените методи


WebAPI действие позволява няколко метода за един endpointa призвание, което зависи от параметрите на заявката.


Такива методи не се поддържат по подразбиране и Swagger UI ще покаже грешка 500: Не се поддържа от Swagger 2.0: Множество операции с пътя "API /"И метод"". Вижте настройката на конфигурационния - \ «ResolveConflictingActions \» за потенциален заобиколно решение.

Както и консултиране на доклада трябва да бъде независимо разрешаване на ситуацията, и има няколко възможности:

  1. изберете само един метод
  2. Един от начините да се направи с всички възможности
  3. поколение документ промяна

първият и вторият методи се прилагат, използвайки c.ResolveConflictingActions конфигурация (Func, ApiDescription> conflictingActionsResolver). Същността на метода е да се гарантира, за да отнеме няколко противоречащи си методи и да се върне един.

Пример за това как да се обединят всички параметри

Методът на кардинална


Третият метод е по-важна е изхвърлянето на OpenAPI от спецификацията. Можете да покажете всички endpointy с параметри:

За да направите това, трябва да промените начина, по който се генерира документ Swagger използване IDocumentFilter и да генерират свои собствени описание.

В живота, този метод рядко се използва, за да се копае още по-дълбоко. Друг начин, който бих препоръчал само на тези, които се интересуват от вътрешността Swashbuckle - е да се замени SwaggerGenerator. Това е в съответствие c.CustomProvider (defaultProvider => нов NewSwaggerProvider (defaultProvider)). За да направите това, можете да го направите:

  1. създадете своя клас MySwaggerGenerator: ISwaggerProvider
  2. в Swashbuckle хранилище на GitHub намерите SwaggerGenerator.cs (тя е тук)
  3. метод GetSwagger копие и други техники, свързани с вашия
  4. дублират вътрешните променливи и да ги инициализира в конструктора на класа си
  5. конфигурация регистър Swagger на

Инициализиране на вътрешните променливи


След това трябва да се намери място VAR пътеки = GetApiDescriptionsFor (apiVersion). Това е мястото, където можете да създадете пътя. Например, за да се получи, че примерът трябва GroupBy () се заменя със .GroupBy (apiDesc => apiDesc.RelativePath).

литература

Свързани статии

Подкрепете проекта - споделете линка, благодаря!