Azure API Management - Как отправить тело вместе с моим запросом - PullRequest
0 голосов
/ 25 мая 2020

У меня есть API, размещенный на Azure, и я начал использовать Azure API Management. Одна из моих конечных точек API - это GET, и она требует передачи тела в виде JSON конечной точке. На моем почтальоне я могу нажать фактический API (размещенный на Azure) и отправить тело, и я могу получить некоторые результаты. Но когда я попытался использовать api для управления azure api, я получил следующее исключение, хотя я отправляю тело запроса:

{
    "errors": {
        "": [
            "A non-empty request body is required."
        ]
    },
    "type": "https://tools.ietf.org/html/rfcXXXX#section-6.5.1",
    "title": "One or more validation errors occurred.",
    "status": 400,
    "traceId": "XXXXXXXXXXXXXXXXXXXXXXXXXXX"
}

Мне не хватает какой-то конфигурации на Azure Api управление? Я просмотрел установленные политики и использовал следующие для входящего трафика, но он все еще не работает

<set-header name="Content-Type" exists-action="override">
    <value>application/json</value>
</set-header>
<set-body template="liquid">{{body.json}}"}</set-body>

Мы будем очень признательны за любое понимание того, как я могу исправить эту проблему. Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 27 мая 2020

Согласно spe c: https://tools.ietf.org/html/rfc7231#section -4.3.1 тело отправки вместе с запросом GET не имеет определенного поведения, и su c hrequest может быть полностью отклонен.

0 голосов
/ 27 мая 2020

Я могу использовать следующую политику для установки тела запроса GET.

<inbound>
    <base />
    <set-header name="Content-Type" exists-action="override">
        <value>application/json</value>
    </set-header>
    <set-body template="liquid">{"QueryString": "123", "param1": "456"}</set-body>
    <set-body>@{ 
        JObject inBody = context.Request.Body.As<JObject>(); 
        return inBody.ToString(); 
    }</set-body>
</inbound>

Когда я тестирую его, я вижу, что он был успешно добавлен в тело. И я также могу получить его, используя context.Request.Body.As<JObject>().

enter image description here

Я заметил, что ваше тело {{body.json}}"}, что кажется неправильным по формату . Вы должны использовать {{body.json}} и убедиться, что body.json содержит точное содержимое.

...