在Azure API Management中,當回到客戶端的響應是500時,我希望檢查響應正文以查看它是否匹配「某些文本」。我需要這樣做,以便我可以更改響應的主體以在此特定場景中包含更多有用的文本。API管理無法將響應正文轉換爲字符串
我的政策下<outbound>
部分由API管理控制檯接受,但是當我測試,並得到一個500,API管理產生一個錯誤 -
表達式求值失敗。無法轉換'Microsoft.WindowsAzure.ApiManagement.Proxy.Gateway.MessageBody'類型的對象來鍵入'System.String'。
我猜這是我的錯,但有誰知道我可以如何修改ploicy,使其不會產生錯誤?爲了澄清,錯誤正在由此行生成 - ((string)(object)context.Response.Body == "Some text")
。
<outbound>
<choose>
<when condition="@((context.Response.StatusCode == 500) && ((string)(object)context.Response.Body == "Some text"))">
<set-status code="500" reason="Internal Server Error" />
<set-header name="Content-Type" exists-action="override">
<value>application/json</value>
</set-header>
<set-body>
{
"statusCode": "500",
"Message": "Some different, more helpful text."
}
</set-body>
</when>
</choose>
</outbound>
更新
我發現context.Response.Body
是IMessageBody
類型。在這種類型的文檔中似乎只有很少的文檔,我可以在Transformation Policies API管理文檔中找到<set-body>
。
的troube是,MS havd記錄的例子會產生一個異常時,我盡力挽救這個政策 -
<set-body>
@{
JObject inBody = context.Request.Body.As<JObject>();
if (inBody.attribute == <tag>) {
inBody[0] = 'm';
}
return inBody.ToString();
}
</set-body>
屬性或索引「string.this [INT]」不能被分配到 - - 它是隻讀的
原始樣本包含閱讀主體作爲字符串,因此索引器工作,因爲字符串類型支持更改單個字母。因爲JObject沒有int index的可寫索引器。 –