Azure Api Management将XML转换为JSON策略入站



我试图在API中定义一个将XML转换为JSON的策略。我们的后端API目前只支持JSON,但我希望客户端能够发布XML。我可以成功地将JSON转换为XML作为出站策略,但是入站策略只会产生一个空帖子。

有效的出站策略为:

<outbound>
    <base />
    <json-to-xml apply="content-type-json" consider-accept-header="true" />
</outbound>

入站策略实际上是相反的:

<inbound>
    <xml-to-json kind="direct" apply="content-type-xml" consider-accept-header="true" />
</inbound>

我已经创建了一个新的测试API指向requestbin实例,这样我就可以检查请求。我在postman中创建了一个简单的XML请求,并将Content-Type设置为text/XML,但是requestbin中的请求总是显示一个空的帖子。

我试着用下面@miao-jiang的有用评论调试。跟踪显示应用了策略,但删除了内容长度。我想知道这是不是根本原因?

2跟踪日志中的相关条目:

{"source":"xml-to-json", "timestamp":"2015-09-08T19:51:01.5919446Z", elapsed":"00:00:00.2116541", "data":"XML-to-JSON policy was applied. Original Content-Length header was removed as its value was invalidated. Content-Type header was set to 'application/json'."}

这里你可以看到策略被应用了,但是请求中没有json。

我试图重现您的问题。你能确认你的后端是否支持Transfer-Encoding: chunked吗?

在xml-to-json策略中发生的事情是,它删除了原始的内容长度头,并将其替换为Transfer-Encoding:chunked,因为转换后长度将不同,我们无法预测长度。

当我使用支持Transfer-Encoding:chunked的后端进行测试时,它工作正常。当我使用另一个不支持它的后端进行测试时,我看到了与您描述的相同的行为。所以我想知道你是否也遇到过这种情况

最新更新