我正在使用Swashbuckle在我的WebApi项目中使用swagger和swagger-ui。
在下图中,您可以看到swagger-ui页面中显示的两个控制器。这些是在C#代码中命名的,但是我想知道是否有办法改变这里显示的内容?
这主要是因为你可以看到ManagementDashboardWidget
不是一个用户友好的名字,所以我想改变它是用户友好的。
您可以使用标签。默认情况下,Swashbuckle会为每个操作添加一个带有控制器名称的标记。您可以使用SwaggerOperationAttribute
覆盖它。例如,下一行使用标记Test替换默认标记Values:
public class ValuesController : ApiController
{
[SwaggerOperation(Tags = new[] { "Test" })]
public IHttpActionResult Get()
{
// ...
}
}
Get
operation现在将被放入Test
组。
如果您希望操作显示在多个组中,则可以添加更多标记。例如:
[SwaggerOperation(Tags = new[] { "Test", "Release1" })]
将把Get
操作放在Test
和Release1
组中。
我尝试使用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
});