我有一个.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不会自动传递一个接受头?
1条答案
按热度按时间jhdbpxl91#
默认情况下,ASP.NET Core仅支持以下媒体类型:
字符串
当你把xml支持添加到你的API项目中时,似乎你得到了一些麻烦。
例如,如果我配置如下:
型
我会遇到你描述的类似问题:
的数据
此外,检查您在配置swagger时应用的过滤器,过滤器修改了该方案可能是导致该问题的原因
型
如果你仍然有问题,请分享一个最小的例子,可以回购