如何在不同的控制器上添加單獨的標頭。 例如:使用Swasbuckle在Web API中的不同控制器中添加單獨的自定義標頭
控制器名稱:控制器1, 自定義首部:頭1
控制器名稱:控制器2, 自定義首部:頭2
聯管箱應的特定的控制器下顯示爲所有API
如何在不同的控制器上添加單獨的標頭。 例如:使用Swasbuckle在Web API中的不同控制器中添加單獨的自定義標頭
控制器名稱:控制器1, 自定義首部:頭1
控制器名稱:控制器2, 自定義首部:頭2
聯管箱應的特定的控制器下顯示爲所有API
這可以通過添加一個OperationFilter到你的swagger配置來解決。 首先你必須提供一個實現IOperationFilter
的類。 Apply
方法接收Operation
參數,其中包含tag
字段中的控制器名稱。當呈現Swagger UI時,將針對API中的每個方法調用Apply
方法。你甚至可以爲每個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
}
}
}
在調試器,一個叫ExampleController
它看起來像這樣的控制器:
的結果Swagger UI是一個特殊參數,僅適用於我的示例控制器的API:
Tell S wagger由SwaggerConfig類的註冊方法添加一行用你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
})
}
的想法,這個解決方案是基於的沙田的回答是:How to send custom headers with requests in Swagger UI?