如何为 OpenApi header 设置字符串列表
How can I set a list of string for an OpenApi header
我正在向 Swagger-UI
添加语言 header 并尝试将其作为 drop-down
列表。出于某种原因,它一直给我一个转换错误。
这是相关代码:
public void Apply(OpenApiOperation operation, OperationFilterContext context)
{
if (operation.Parameters == null)
operation.Parameters = new List<OpenApiParameter>();
var enumList = (_serviceProvider.GetService(typeof(IOptions<RequestLocalizationOptions>)) as IOptions<RequestLocalizationOptions>)?
.Value?.SupportedCultures?.Select(c => new OpenApiString(c.TwoLetterISOLanguageName)).ToList();
operation.Parameters.Add(new OpenApiParameter
{
Name = "Accept-Language",
In = ParameterLocation.Header, // "header",
Description = "Supported languages",
Schema = new OpenApiSchema
{
Default = new OpenApiString("en"),
Type = "string"
//TODO: Can't get this conversion to work and I don't know why...
,
Enum = (IList<IOpenApiAny>)enumList
},
Required = false
}) ;
}
这是我遇到的错误(在运行时):
Unable to cast object of type 'System.Collections.Generic.List[Microsoft.OpenApi.Any.OpenApiString]' to type 'System.Collections.Generic.IList[Microsoft.OpenApi.Any.IOpenApiAny]'.
没有 enum
,一切正常,header 在 Swagger UI 中的每个请求中显示为默认的文本框。
我花了几个小时试图在文档中找到答案,但我找不到。
好的,我明白了。
var enumList = (_serviceProvider.GetService(typeof(IOptions<RequestLocalizationOptions>)) as IOptions<RequestLocalizationOptions>)?
.Value?.SupportedCultures?.Select(c => OpenApiAnyFactory.CreateFor(new OpenApiSchema() { Type = "string" }, c.Name)).ToList();
我正在向 Swagger-UI
添加语言 header 并尝试将其作为 drop-down
列表。出于某种原因,它一直给我一个转换错误。
这是相关代码:
public void Apply(OpenApiOperation operation, OperationFilterContext context)
{
if (operation.Parameters == null)
operation.Parameters = new List<OpenApiParameter>();
var enumList = (_serviceProvider.GetService(typeof(IOptions<RequestLocalizationOptions>)) as IOptions<RequestLocalizationOptions>)?
.Value?.SupportedCultures?.Select(c => new OpenApiString(c.TwoLetterISOLanguageName)).ToList();
operation.Parameters.Add(new OpenApiParameter
{
Name = "Accept-Language",
In = ParameterLocation.Header, // "header",
Description = "Supported languages",
Schema = new OpenApiSchema
{
Default = new OpenApiString("en"),
Type = "string"
//TODO: Can't get this conversion to work and I don't know why...
,
Enum = (IList<IOpenApiAny>)enumList
},
Required = false
}) ;
}
这是我遇到的错误(在运行时):
Unable to cast object of type 'System.Collections.Generic.List[Microsoft.OpenApi.Any.OpenApiString]' to type 'System.Collections.Generic.IList[Microsoft.OpenApi.Any.IOpenApiAny]'.
没有 enum
,一切正常,header 在 Swagger UI 中的每个请求中显示为默认的文本框。
我花了几个小时试图在文档中找到答案,但我找不到。
好的,我明白了。
var enumList = (_serviceProvider.GetService(typeof(IOptions<RequestLocalizationOptions>)) as IOptions<RequestLocalizationOptions>)?
.Value?.SupportedCultures?.Select(c => OpenApiAnyFactory.CreateFor(new OpenApiSchema() { Type = "string" }, c.Name)).ToList();