2017-02-28 49 views
0

在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.BodyIMessageBody類型。在這種類型的文檔中似乎只有很少的文檔,我可以在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]」不能被分配到 - - 它是隻讀的

+0

原始樣本包含閱讀主體作爲字符串,因此索引器工作,因爲字符串類型支持更改單個字母。因爲JObject沒有int index的可寫索引器。 –

回答

1

Try context.Request.Body.As <string>()。方法作爲當前支持以下類型作爲通用參數值:

  • 字節[]
  • JToken
  • JObject
  • JArray
  • XNode
  • 的XElement
  • 的XDocument

請注意,如果您嘗試呼叫。如果<JObject>未包含有效JSON的響應,您將收到一個異常,同樣也適用於其他類型。

+0

謝謝,我將銘記未來。 –