Azure API Managementでは、クライアントに返される応答が500の場合、応答の本文をチェックして「Some text」と一致するかどうかを確認します。この特定のシナリオでもっと役に立つテキストを含むように応答の本文を変更できるように、これを行う必要があります。API管理が文字列としてレスポンスボディをキャストできません
私の政策の次<outbound>
セクションは、APIの管理コンソールによって受け入れられたが、私はテストして、500を得るとき、API管理でエラーが発生している -
式の評価に失敗しました。型 'Microsoft.WindowsAzure.ApiManagement.Proxy.Gateway.MessageBody'のオブジェクトをキャストできません 'System.String'を入力します。
私はこれが私のせいだと推測していますが、どのようにしてエラーが生成されないように改造を修正することができますか?明確にするために、この行でエラーが生成されています - ((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を持つ書き込み可能なインデクサがない場合 –