[英]Change response body in azure api management service
我正在使用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>
我最終遇到了這個錯誤:
set-body (7.739 ms) { “messages”: [ { “message”: “Expression evaluation failed.”, “expression”: “\n var response = context.Response.Body.As();\n response[” id"] = 2;\n return response.ToString();\n ", "details": "消息正文不是有效的 JSON。解析值時遇到意外字符:�. 路徑 '',第 0 行,position 0.\r\n 在 Newtonsoft.Json.JsonTextReader.ParseValue()\r\n 在 Newtonsoft.Json.Linq.JObject.Load(JsonReader 閱讀器,JsonLoadSettings 設置)\r\n 在 Microsoft.WindowsAzure.ApiManagement.Proxy.Gateway。 MessageBody.AsJObject(Stream stream, Encoding 編碼, JsonSerializerSettings 設置)\r\n at Microsoft.WindowsAzure.ApiManagement.Proxy.Gateway.MessageBody.As[T](Boolean preserveContent)" }, "表達式計算失敗。消息正文是不是有效的 JSON。解析值時遇到意外字符:�. 路徑“”,第 0 行,position 0.\r\n 在 Newtonsoft.Json.JsonTextReader.P arseValue()\r\n 在 Newtonsoft.Json.Linq.JObject.Load(JsonReader 閱讀器,JsonLoadSettings 設置)\r\n 在 Microsoft.WindowsAzure.ApiManagement.Proxy.Gateway.MessageBody.AsJObject(流 stream,編碼器編碼,JsonSerial 設置) \r\n 在 Microsoft.WindowsAzure.ApiManagement.Proxy.Gateway.MessageBody.As[T](Boolean preserveContent)","解析值時遇到意外字符:�。 路徑 '',第 0 行,position 0。"] }
執行此策略並顯示正文為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>
添加了一個跟蹤:
<trace source="test">
<message>@{
return context.Response.Body.As<string>(preserveContent: true);
}</message>
</trace>
test (0.006 ms)
"��\u0002\u0000 ���%\u001d�WV\rm%\n:\u0018�˫�y�ȁ[�P߁��>�\u0000�w9\u0015s\b�èS7���˻\u0013�\u0005늇>qs*��\f�\u0001"
將 header 設置為Accept-Encoding: *
給了我一個成功的回應。 我以為Content-Type: application/json; charset=utf-8
Content-Type: application/json; charset=utf-8
足以進行編碼。 我需要更深入地研究 Accept-Encoding,但是當我在跟蹤中看到錯誤時,它看起來像是一個編碼問題,這就是我得出解決方案的方式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.