gpt4 book ai didi

asp.net-web-api - 使用 Swasbuckle 在 web api 的不同 Controller 中添加单独的自定义 header

转载 作者:行者123 更新时间:2023-12-04 22:42:39 25 4
gpt4 key购买 nike

如何在不同的 Controller 上添加单独的 header 。例如:

Controller 名称:Controller1,自定义 header :Header1

Controller 名称:Controller2,自定义 header :Header2

应该为特定 Controller 下的所有 api 显示 header

最佳答案

这可以通过在您的 swagger 配置中添加一个 OperationFilter 来解决。首先,您必须提供一个实现 IOperationFilter 的类。 Apply 方法接收一个 Operation 参数,该参数在 tag 字段中包含 Controller 名称。呈现 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 的 Controller ,它看起来像这样:

debug output

Swagger UI 中的结果是一个特殊参数,它仅应用于我的示例 Controller 的 API: swagger ui showing special parameter

通过在 SwaggerConfig 类的 Register 方法中添加一行,告诉 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
})

}

这个解决方案的想法是基于沙田的回答:How to send custom headers with requests in Swagger UI?

关于asp.net-web-api - 使用 Swasbuckle 在 web api 的不同 Controller 中添加单独的自定义 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44492912/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com