2016-11-01 2 views
2

Я строю службу REST, в которой будут размещаться несколько контроллеров (микросервисов). В целом, позвоните в сервис «Боб». Таким образом, swagger отображает «Bob»/«Коллекция Bob Microservices». Затем перечисляются имена контроллеров. Прямо сейчас, это просто показывает XYZ, ABC и т. Д. Есть ли способ, чтобы, возможно, показалось, что «XYZ - коллекция XYZ API» или что-то в этом роде?Есть ли у контроллера Swagger (Asp.Net Core) описание контроллера?

Кажется, что чванство показывает /// Резюме методов, но не на контроллерах.

+0

Быстрое примечание: несколько контроллеров, безусловно, не являются микросервисами –

+0

@KierenJohnstone - в этом смысле именно так они и хотели это сделать. Очевидно, что не чистый REST ... но у нас будет несколько методов POST в контроллере, заданных с помощью маршрутов. Таким образом, вы сможете отправлять сообщения в/Bob/XYZ/method1,/Bob/XYZ/method2 и т. Д. Вот почему они называют это микросервисами. – SledgeHammer

+0

Это просто веб-API, возможно, не использующий REST. Микросервисы - это нечто совершенно другое: коллекция отдельно версий, построенных и обычно автоматически развернутых сервисов, каждая из которых обычно имеет свои собственные хранилища данных и ограниченный контекст. Вы просто говорите о «Контроллерах» –

ответ

4

Есть ли способ, возможно, есть чванство шоу "XYZ - коллекция XYZ API,"

Да. Вот один из самых простых способов. Базовая версия Swagger ASP.NET использует атрибут ApiExplorerSettings. Вы можете установить GroupName.

public class BobController 
{ 
    [ApiExplorerSettings(GroupName="XYZ - A collection of XYZ APIs")] 
    public IActionResult MyAction() 
    { 
     ... 
    } 
} 

Название группы отображается в пользовательском интерфейсе Swagger с действиями группы, перечисленными в качестве операций под ней.

enter image description here

Edit: Вот идея, основанная на комментарий кувалдой в.

Swagger ASP.NET Core использует IApiDescriptionGroupCollectionProvider для создания групп описания. Мы могли бы реализовать свои собственные, используя по умолчанию ApiDescriptionGroupCollectionProvider для вдохновения и зарегистрировать нашего провайдера в течение Startup.ConfigureServices. Наша реализация заставит метод ApiDescriptionGroups() вернуть GroupName, связанный с контроллером каждого действия. Тогда мы могли бы поместить атрибут ApiExplorerSettings на каждый контроллер, а не на каждое действие.

+0

Спасибо Shaun, кажется, мне нужно поместить это на каждый метод в контроллере? Я попытался поместить его в класс (поскольку атрибут говорит, что его разрешено), но Swagger не выбрал это. – SledgeHammer

+0

@SledgeHammer Да. Нам нужно поставить этот атрибут на каждый метод в контроллере. Если позволит время, я буду исследовать способ применения его на уровне контроллера. –

+0

@SledgeHammer Смотрите правки для идеи. –

1

Вы также можете использовать SwaggerOperationAttribute для этого:

public class MyController 
{ 
    [SwaggerOperation(Tags = new[] { "XYZ - A collection of XYZ APIs" })] 
    public IActionResult MyAction() 
    { 
    } 
} 

В Swashbuckle.AspNetCore версии 1.0.0-RC3 ApiExplorerSettingsAttribute используется для включения действия в конкретном Swagger документе.