swagger 防止Swashbuckle设置“接受”标题

cbjzeqam  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(146)

我有一个.NET 7 Web API项目,我在其中使用Swashbuckle.AspNetCore来生成Swagger UI。
我的一个端点可以根据响应状态码返回不同的Content-Type值; application/xml表示200,application/json表示404。
我已经通过用SwaggerResponse属性装饰控制器方法来让Swagger UI传达这一点,例如200的示例响应显示为XML,404的示例响应显示为JSON。
当我从Swagger UI实际调用端点时,问题就来了。响应总是XML,即使是404。我在Postman中调用了同一个端点,令我惊讶的是,看到了不同的行为- JSON用于404而不是XML。然后我意识到发生了什么:Swagger UI传递一个Accept头,内容类型为application/xml,所以它基本上是在进行内容协商。
更仔细地看一下Swagger,在第一个示例响应旁边的“Controls Accept header”中可以清楚地看到:
x1c 0d1x的数据
我的问题是:是否有可能改变这种行为,使Swashbuckle不会自动传递一个接受头?

jhdbpxl9

jhdbpxl91#

默认情况下,ASP.NET Core仅支持以下媒体类型:

application/json

text/json

text/plain

字符串
当你把xml支持添加到你的API项目中时,似乎你得到了一些麻烦。
例如,如果我配置如下:

builder.Services.AddControllers().AddXmlSerializerFormatters();
builder.Services.Configure<MvcOptions>(options =>
{
    options.OutputFormatters.Insert(0, new XmlSerializerOutputFormatter());
});


我会遇到你描述的类似问题:


的数据
此外,检查您在配置swagger时应用的过滤器,过滤器修改了该方案可能是导致该问题的原因

builder.Services.AddSwaggerGen(c=>c.SchemaFilter<.....>);


如果你仍然有问题,请分享一个最小的例子,可以回购

相关问题