更改azure api管理服务中的响应主体



我正在使用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

最新更新