Как изменить имя контроллера в Swagger-UI? - PullRequest
0 голосов
/ 16 января 2019

если у меня есть следующее:

MySimpleTestController : ApiController
{
}

Возможно ли, чтобы имя контроллера отображалось как "My Simple Test" вместо "MySimpleTest" в сгенерированных документах API?

Я выполнил поиск, но в основном я нашел способы сделать это в Java с помощью аннотации @Api, но я использую C # (.net 4.5.2).

Вот в одну сторону , чтобы сделать это, но это требует добавления аннотации к каждому отдельному маршруту в контроллере, что было бы громоздко, так как у моего контроллера много маршрутов. Есть ли лучший способ?

1 Ответ

0 голосов
/ 25 января 2019

Вот как я это сделал:

[AttributeUsage(AttributeTargets.Class, AllowMultiple = false)]
public class SwaggerControllerNameAttribute : Attribute
{
    public string ControllerName { get; private set; }

    public SwaggerControllerNameAttribute(string ctrlrName)
    {
        if (string.IsNullOrEmpty(ctrlrName))
        {
            throw new ArgumentNullException("ctrlrName");
        }
        ControllerName = ctrlrName;
    }
}

А затем добавьте следующий код в конфигурацию:

configuration.EnableSwagger(c =>
{
     c.GroupActionsBy(apiDesc =>
     {
          var attribute = apiDesc.GetControllerAndActionAttributes<SwaggerControllerNameAttribute>();
          if (attribute.Any())
          {
               return attribute.First().ControllerName;
          }
          else
          {
               return apiDesc.ActionDescriptor.ControllerDescriptor.ControllerName;
          }
     });        
}

И тогда вы можете сделать это:

[SwaggerControllerName("My Simple Test")]
public class MySimpleTestController : ApiController
{
}
...