有没有办法在swagger-ui页面中更改Controller的名称?

问题描述 投票:11回答:2

我正在使用Swashbuckle在我的WebApi项目中使用swagger和swagger-ui。

在下图中,您可以看到swagger-ui页面中显示的两个控制器。这些是在C#代码中命名的,但是我想知道是否有办法改变这里显示的内容?

这主要是因为你可以看到ManagementDashboardWidget不是一个用户友好的名字,所以我想改变它是用户友好的。

swagger-ui

c# swagger swagger-ui swashbuckle
2个回答
10
投票

您可以使用标签。默认情况下,Swashbuckle会为每个操作添加一个带有控制器名称的标记。您可以使用SwaggerOperationAttribute覆盖它。例如,下一行使用标记Test替换默认标记Values:

public class ValuesController : ApiController
{
    [SwaggerOperation(Tags = new[] { "Test" })]
    public IHttpActionResult Get()
    {
        // ...
    }
}

Getoperation现在将被放入Test组。

如果您希望操作显示在多个组中,则可以添加更多标记。例如:

[SwaggerOperation(Tags = new[] { "Test", "Release1" })]

将把Get操作放在TestRelease1组中。


2
投票

我尝试使用venerik的答案,但它仍然在UI中保留原始控制器名称以及您指定的新标记。我也不喜欢你必须为每个函数添加一个属性,所以我想出了一个解决方案,你只需要向控制器添加一个属性。有两个步骤:

在控制器上添加DisplayNameAttribute

[DisplayName("Your New Tag")]
public class YourController : ApiController
{
    // ...
}

然后在Swagger配置中,您可以使用GroupActionsBy函数覆盖基本功能,以提取您在该属性中指定的名称:

GlobalConfiguration.Configuration
    .EnableSwagger(c => {

        c.GroupActionsBy(apiDesc => {
            var attr = apiDesc
                .GetControllerAndActionAttributes<DisplayNameAttribute>()
                .FirstOrDefault();

            // use controller name if the attribute isn't specified
            return attr?.DisplayName ?? apiDesc.ControllerName(); 
        });

    })
    .EnableSwaggerUi(c => {
        // your UI config here
    });
© www.soinside.com 2019 - 2024. All rights reserved.