【问题标题】:XML support in Swagger (.Net Core)?Swagger (.Net Core) 中的 XML 支持?
【发布时间】:2018-01-02 19:54:15
【问题描述】:

我有我们都在工作中使用的 Asp.net Core Swagger 框架。它只是用 Swagger 包装了所有 PITA 的东西。它被设计为 json in / json out。现在有一个小组只想将它与 XML in / XML out 一起使用。

这是我到目前为止所做的:

1) 将 startup.cs 更改为:

services.AddMvc().AddXmlSerializerFormatters();

2) 在控制器方法上,改为:

    [Consumes("application/xml")]
    [Produces("application/xml")]

3) 在操作过滤器中,添加:

operation.Produces.Add("application/xml");

现在,在测试 UI 中,我只获得用于输入和输出下拉菜单的 application/xml。当我点击测试按钮时,我的请求被正确反序列化,但测试页面产生 406 错误。

我还需要改变什么?

【问题讨论】:

    标签: c# asp.net-core swagger swagger-ui


    【解决方案1】:

    客户端需要发送一个包含application/xmlAccepts 标头。您已将 application/xml 设置为唯一可能的响应类型,如果客户端请求类似 application/json 的内容,服务器将无法再满足该请求。

    【讨论】:

    • 我的意思是测试 ui 就像在内置的 swagger 测试页面中一样。这就是我看到 406 错误的地方。请求以 xml 格式发送。
    • 是的,因为请求的 Content-Type 标头是作为 application/xml 发送的。但是,这与发送的Accepts 标头没有 相关,而 决定了服务器响应的类型。如果application/xml 不存在于该标头中(它显然不存在),则服务器无法响应请求,因为它现在只能 返回application/xml。这就是内容协商的工作原理。
    • 好的,我查看了 swagger 测试页发送的内容及其发送: curl -X POST --header 'Content-Type: application/xml' --header 'Accept: application/xml' -d ' \,所以它已经有了 Accept 标头。似乎响应仍在 json 中发送回。
    • 我在提琴手中尝试了 Accepts application/xml 和 Accepts application/json ,但都不起作用。两者都获得 HTTP 406。
    猜你喜欢
    • 2017-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-24
    • 2017-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多