C# 如何在swagger UI中使用Swashback设置内容类型application/json和application/xml

C# 如何在swagger UI中使用Swashback设置内容类型application/json和application/xml,c#,.net-core,swagger-ui,swashbuckle,C#,.net Core,Swagger Ui,Swashbuckle,嗨,我在用虚张声势的皮带扣 我想为请求和响应负载设置内容类型“application/json和application/xml”。谁能帮助我如何根据我的偏好设置内容类型。 我已经尝试过这个代码,它是为请求工作,而不是为响应。 [HttpPost] [Consumes(MediaTypeNames.Application.Json)] [SwaggerResponse(200,null,typeof(Logs))] [SwaggerResponse(400, null, t

嗨,我在用虚张声势的皮带扣 我想为请求和响应负载设置内容类型“application/json和application/xml”。谁能帮助我如何根据我的偏好设置内容类型。 我已经尝试过这个代码,它是为请求工作,而不是为响应。 [HttpPost]

    [Consumes(MediaTypeNames.Application.Json)]
    [SwaggerResponse(200,null,typeof(Logs))]
    [SwaggerResponse(400, null, typeof(Logs))]
    public async Task<IActionResult> PostAsync()
[使用(MediaTypeNames.Application.Json)]
[SwaggerResponse(200,null,typeof(日志))]
[SwaggerResponse(400,null,typeof(日志))]
公共异步任务PostAsync()

要配置响应的内容类型,可以使用过滤器:

public class SwaggerMediaTypesOperationFilter : IOperationFilter
{
    public void Apply(OpenApiOperation operation, OperationFilterContext context)
    {
        foreach (var key in operation.Responses.Keys)
        {
            FilterMediaTypes(operation.Responses[key].Content);
        }

        if (operation.RequestBody?.Content != null)
        {
            FilterMediaTypes(operation.RequestBody.Content);
        }
    }

    private static void FilterMediaTypes(IDictionary<string, OpenApiMediaType> apiMediaTypes)
    {
        if (apiMediaTypes.TryGetValue(MediaTypeNames.Application.Json, out OpenApiMediaType applicationJson))
        {
            apiMediaTypes.Clear();
            apiMediaTypes.Add(MediaTypeNames.Application.Json, applicationJson);
            apiMediaTypes.Add(MediaTypeNames.Application.Xml, applicationJson);
        }
    }
}
公共类SwiggerMediaTypeSoperationFilter:IOperationFilter
{
公共无效应用(OpenApiOperation操作,OperationFilterContext上下文)
{
foreach(var key in operation.Responses.Keys)
{
FilterMediaTypes(operation.Responses[key].Content);
}
if(operation.RequestBody?.Content!=null)
{
FilterMediaTypes(operation.RequestBody.Content);
}
}
专用静态void筛选器中介类型(IDictionary apiMediaTypes)
{
if(apiMediaTypes.TryGetValue(MediaTypeNames.Application.Json,out OpenApiMediaType applicationJson))
{
apiMediaTypes.Clear();
添加(MediaTypeNames.Application.Json,applicationJson);
添加(MediaTypeNames.Application.Xml,applicationJson);
}
}
}
那么

services.AddSwaggerGen(cfg=>
{
cfg.OperationFilter();
...
};

非常感谢您的帮助
services.AddSwaggerGen(cfg =>
{
  cfg.OperationFilter<SwaggerMediaTypesOperationFilter>();
  ...
};