2017-02-27 20 views
0

現在、私はAzure API Managementのpolicysで作業していますが、興味深いのは、応答本体から返される値を抽出することです。API管理ポリシーでレスポンスボディから価値を引き出す方法は?

<send-one-way-request mode="new"> 
    <set-url>http://requestb.in/xje199xj</set-url> 
    <set-method>POST</set-method> 
    <set-header name="Content-Type" exists-action="override"> 
    <value>application/json</value> 
    </set-header> 
     <set-body>@{ 

      //JObject or string? 
      string response = context.Response.Body.As<string>(preserveContent: true); 
      //something here.. 
      } 
     </set-body> 
    </send-one-way-request> 

応答は次のようになります。私はこの場合「TRA」で、「resourceCode」属性から返されてthatsの値を取得してから、新しいjオブジェクトを作成したい

"getBookableResourcesResponse": { "getBookableResourcesResult": { "hasError": false, "errorCode": 0, "BookableResource": [ { "resourceCode": "TRA", "description": "Trailer", "group": "F", "subGroup": "C", "category": "R", "dialogType": "CARGO", "orgCode": "DECK", "length": 14, "taraWeight": "7000", "grossWeight": "25001", "AddResource": [ { "resourceCode": "EXPFIN", "description": "Export Finland", "dialogType": "UNDEFINED", "amount": "0", "ticketType": "", "orgCode": "EXPFIN", "required": "false" }.....

私は私のAzure関数に送ることができます。

{ "resourceCode": "valueFromResponseBody" }

答えて

0
My solution: 



<send-one-way-request mode="new"> 
      <set-url></set-url> 
      <set-method>POST</set-method> 
      <set-header name="Content-Type" exists-action="override"> 
       <value>application/json</value> 
      </set-header> 
      <set-body>@{ 

       string xml = context.Response.Body.As<string>(preserveContent: true); 
       XmlDocument doc = new XmlDocument(); 
       doc.LoadXml(xml); 

      XmlNodeList elemList = doc.DocumentElement.GetElementsByTagName("ResourceCode");   

      string allResources = string.Empty; 
      foreach (XmlNode item in elemList) 
      { 
       if (item.InnerText == "TRA" || item.InnerText == "CONT20" || item.InnerText == "CONT23" || item.InnerText == "CONT26" || item.InnerText == "CONT30" || item.InnerText == "CONT40" || item.InnerText == "CONT45" || item.InnerText == "TRUCK"|| item.InnerText == "VAN" || item.InnerText == "CAMP" || item.InnerText == "CAR") 
       { 
        allResources += item.InnerText + ","; 

       }       
      } 

      allResources = allResources.Substring(0, allResources.Length - 1); 

      return new JObject(new JProperty("resourceCode", allResources)).ToString(); 

      }</set-body> 
     </send-one-way-request> 
2

代わりの

string response = context.Response.Body.As<string>(preserveContent: true); 

試してみてください。

var response = context.Response.Body.As<JObject>(preserveContent: true); 

後でJson.NET jオブジェクト(http://www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_Linq_JObject.htm)を返しますあなたの応答をナビゲートするために使用することができます。

関連する問題