Jho*_*n S 3 asp.net-web-api swagger-ui swagger-2.0 swashbuckle
如何在不同的控制器上添加单个标头。例如:
控制器名称:Controller1,自定义标头:Header1
控制器名称:Controller2,自定义标头:Header2
应在特定控制器下显示所有api的标题
这可以通过将一个OperationFilter添加到您的swagger配置中来解决。首先,您必须提供一个实现的类IOperationFilter。该Apply方法接收一个Operation参数,该参数在tag字段中包含控制器名称。呈现Swagger UI时,Apply将为API中的每个方法调用该方法。您甚至可以为每个API方法提供单独的参数,因为其中Operation 还包含operationId。
public class AddRequiredHeaderParameter : IOperationFilter
{
public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription)
{
if (operation.parameters == null)
operation.parameters = new List<Parameter>();
if (operation.tags[0]?.CompareTo("Example") == 0)
{
operation.parameters.Add(new Parameter
{
name = "X-ExampleParam",
@in = "header",
@default = "42", // optional default value, can be omitted
type = "string",
description = "My special parameter for the example API",
required = true
});
}
else if (operation.tags[0]?.CompareTo("Whatever") == 0)
{
// add other header parameters here
}
}
}
Run Code Online (Sandbox Code Playgroud)
在调试器中,使用名为的控制器ExampleController,如下所示:
Swagger UI中的结果是一个特殊参数,仅适用于我的Example控制器的API:

通过Register在SwaggerConfig类的方法中添加一行来告诉Swagger使用OperationFilter :
public class SwaggerConfig
{
public static void Register(HttpConfiguration config)
{
var thisAssembly = typeof(SwaggerConfig).Assembly;
//GlobalConfiguration.Configuration
config
.EnableSwagger(c =>
{
... // omitted some lines here
c.OperationFilter<AddRequiredHeaderParameter>(); // Add this line
... // omitted some lines here
})
}
Run Code Online (Sandbox Code Playgroud)
此解决方案的想法基于ShaTin的答案:如何在Swagger UI中发送带有请求的自定义标头?
| 归档时间: |
|
| 查看次数: |
915 次 |
| 最近记录: |