如何在swagger-ui中更改控制器名称?

时间:2019-01-16 17:43:53

标签: c# asp.net-web-api swagger swagger-ui

如果我具有以下条件:

MySimpleTestController : ApiController
{
}

是否可以在生成的API文档中将控制器名称显示为“我的简单测试”而不是“ MySimpleTest”?

我进行了搜索,但是我大多数都找到了使用@Api注释在Java中进行搜索的方法,但是我使用的是C#(.net 4.5.2)。

这里是one way,但需要在Controller中的每个路由上添加注释,因为我的控制器有很多路由,所以这很麻烦。有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

这就是我最终要做的事情:

[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
{
}