我正在使用json占位符api用APIm测试GET
请求,无法替换我的响应体。感谢您的帮助!
JSON响应:
{
"userId": 1,
"id": 1,
"title": "delectus aut autem",
"completed": false
}
这是我的政策:
<policies>
<inbound>
<base />
</inbound>
<backend>
<base />
</backend>
<outbound>
<base />
<choose>
<when condition="@(context.Response.StatusCode == 200)">
<set-body>@{
var response = context.Response.Body.As<JObject>();
response["id"] = "Hello World!";
return response.ToString();
}
</set-body>
</when>
</choose>
</outbound>
<on-error>
<base />
</on-error>
</policies>
我最终出现了这个错误:
集主体(7.739毫秒({"消息":[{"消息":"表达式求值失败&";,"表达式":"\n var response=上下文。回答身体As((;\n响应["id"]=2;\n返回响应。ToString((;\n〃;,"细节":"消息正文不是有效的JSON。分析值时遇到意外字符:�.路径",行0,位置0。\r\n在Newtonsoft。Json。JsonTextReader。ParseValue((\r\n位于Newtonsoft。Json。林克。JObject。加载(JsonReader阅读器、JsonLoadSettings设置(\r\n微软WindowsAzure。ApiManagement。代理网关。消息正文。AsJObject(流流,编码,JsonSerializerSettings设置(\r\n微软WindowsAzure。ApiManagement。代理网关。消息正文。As[T](布尔preserveContent(";},"表达式求值失败。消息正文不是有效的JSON。分析值时遇到意外字符:�.路径",第0行,位置0。\r\n位于Newtonsoft。Json。JsonTextReader。ParseValue((\r\n位于Newtonsoft。Json。林克。JObject。加载(JsonReader阅读器、JsonLoadSettings设置(\r\n微软WindowsAzure。ApiManagement。代理网关。消息正文。AsJObject(流流,编码,JsonSerializerSettings设置(\r\n微软WindowsAzure。ApiManagement。代理网关。消息正文。As[T](布尔preserveContent(";,"分析值时遇到意外字符:�.路径",第0行,位置0;]}
更新1:
执行此策略并显示主体为null
。有没有办法等待响应机构?当我在vscode中调试它并逐步完成它时,我成功地得到了响应。这是我的新出境政策:
<policies>
<inbound>
<base />
</inbound>
<backend>
<base />
</backend>
<outbound>
<base />
<return-response>
<set-header name="Content-Type">
<value>application/json</value>
</set-header>
<set-header name="Accept">
<value>application/json</value>
</set-header>
<set-body>@{
JObject body = null;
try {
body = context.Response.Body.As<JObject>(preserveContent: true);
return "{"id":"+ @body["type"] + "}";
} catch (Exception e) {
return JsonConvert.SerializeObject(context.Response.Body);
}
}
</set-body>
</return-response>
</outbound>
<on-error>
<base />
</on-error>
</policies>
更新2
添加了跟踪:
<trace source="test">
<message>@{
return context.Response.Body.As<string>(preserveContent: true);
}</message>
</trace>
跟踪结果:
test (0.006 ms)
"��u0002u0000 ���%u001d�WVrm%n:u0018�˫�y�ȁ[�P߁��>�u0000�w9u0015sb�èS7���˻u0013�u0005늇>qs*��f�u0001"
将标头设置为Accept-Encoding: *
给了我一个成功的响应。我认为Content-Type: application/json; charset=utf-8
足以进行编码。我需要更深入地研究Accept Encoding,但当我在跟踪中看到错误时,它看起来像是一个编码问题,这就是我的解决方案。
我遇到了同样的问题,对我来说,需要在请求中设置头。这是一个链接https://github.com/MicrosoftDocs/azure-docs/issues/95956