【问题标题】:How to change controller's name in swagger-ui?如何在 swagger-ui 中更改控制器的名称?
【发布时间】:2019-06-10 20:46:26
【问题描述】:

如果我有以下情况:

MySimpleTestController : ApiController
{
}

是否可以让控制器名称在生成的 API 文档中显示为“My Simple Test”而不是“MySimpleTest”?

我进行了搜索,但我主要找到了使用 @Api 注释在 Java 中执行此操作的方法,但我使用的是 C# (.net 4.5.2)。

这里是one way,但它需要为控制器中的每条路由添加一个注释,这会很麻烦,因为我的控制器有很多路由。有没有更好的办法?

【问题讨论】:

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


【解决方案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
{
}

【讨论】:

  • 是的,干得好。我有一堆像这样的招摇过滤器和扩展,我需要发布。
猜你喜欢
  • 2022-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多