Как передать список строк в качестве параметра запроса в Azure API Management? - PullRequest
0 голосов
/ 27 сентября 2019

Я создал конечную точку API GET, которая принимает список строк, и пытаюсь открыть его для APIM.Как передать строку в конечную точку из APIM и какие преобразования из запроса необходимо выполнить?

Ответы [ 2 ]

1 голос
/ 29 сентября 2019

Это в значительной степени зависит от формата запроса, который ожидает ваш сервер.

Предположим, вы хотите иметь операцию GET, такую ​​как /multivalues?parm1=11&parm1=22, и вам нужно преобразовать ее в JSON-массив для операции POSTтело.Предоставление параметров в этом формате позволит вам извлечь несколько значений в виде строкового массива, а затем преобразовать его в какой-то другой массив:

    <set-method>POST</set-method>
    <set-body template="none">var body = new JObject();
            string[] arrayOfStrings = (string[])context.Request.Url.Query["parm1"];
            var parameterArray = new JArray();
            foreach(string value in arrayOfStrings)
            {
                var parm1 = new JObject();
                parm1["name"] = "parm1";
                parm1["value"] = value;                    
                parameterArray.Add(parm1);
            }
            body["parameters"] = parameterArray;
            return body.ToString();</set-body>

Но вы также можете иметь свой собственный разделитель в одной строке, такой как /multivalues?parm2=11,22:

    <set-method>POST</set-method>
    <set-body template="none">var body = new JObject();
            string[] arrayOfStrings = (string [])context.Request.Url.Query["parm2"];
            string[] subArrayOfStrings = arrayOfStrings[0].Split(',');
            var parameterArray = new JArray();
            foreach(string value in subArrayOfStrings)
            {
                var parm2 = new JObject();
                parm2["name"] = "parm2";
                parm2["value"] = value;                    
                parameterArray.Add(parm2);
            }
            body["parameters"] = parameterArray;
            return body.ToString();</set-body>
0 голосов
/ 30 сентября 2019

В дополнение к ответу Кая, если вы хотите после преобразований вызвать некоторую внешнюю конечную точку, вы можете использовать политику отправки запроса.Например, вы можете выполнить:

<send-request mode="new" response-variable-name="tokenstate" timeout="20" ignore-error="true">
<set-url><EXTERNAL URL HERE></set-url>
<set-method>POST</set-method>
<set-header name="Content-Type" exists-action="override">
  <value>application/json</value>
</set-header>
<set-body template="none">var body = new JObject();
        string[] arrayOfStrings = (string[])context.Request.Url.Query["parm1"];
        var parameterArray = new JArray();
        foreach(string value in arrayOfStrings)
        {
            var parm1 = new JObject();
            parm1["name"] = "parm1";
            parm1["value"] = value;                    
            parameterArray.Add(parm1);
        }
        body["parameters"] = parameterArray;
        return body.ToString();</set-body>
</send-request>
...