Почему политика Set-Body не распознает мое тело POST?
Я пытаюсь подключить конечную точку API в Azure (управление API) к бэкэнд-службе. Однако политика set-body не распознает мое тело JSON и, следовательно, не преобразует его для внутреннего вызова.
Я перепробовал все итерации для шаблонов "Жидкость" и "Нет". Документация Microsoft бесполезна, поскольку даже "жидкий" шаблон пишется с заглавной буквы в документе, тогда как он ДОЛЖЕН быть строчным. Даже статья о Deep Dive, на которую все указывают, вводит в заблуждение и / или устарела.
Однажды мне удалось получить ссылку {{context.Request.OriginalUrl}} для работы с использованием жидкого шаблона, но я не могу получить ссылку {{body.json}} для работы
Вот политика, которую я имею в разделе (чисто для проверки - это бесполезно для того, что я делаю):
<set-body template="liquid">
Calling User Agent: {{context.Request.OriginalUrl}}
</set-body>
И вот пример того, что я должен попробовать прочитать тело json (проходя через POST):
<set-body template="liquid">{{body}}</set-body>
Я пробовал несколько итераций и входов, как показано ниже:
<set-body template="liquid">{{body.json}}</set-body>
проходя через такое тело:
{"json":"this is an example body"}
Независимо от того, что я делаю, это то, что я вижу в трассировке после тестирования вызова:
set-body (0.069 ms)
{
"input": null,
"output": ""
}
Я, очевидно, открыт для использования шаблона "нет", но я сталкиваюсь с теми же проблемами. Документация неверна - если я скопирую / вставлю пример:
<set-body>@(context.Body.As<String>())</set-body>
Я получаю ошибки как:
One or more fields contain incorrect values:
Error in element 'set-body' on line 32, column 10: 'IProxyRequestContext' does not contain a definition for 'Body' and no extension method 'Body' accepting a first argument of type 'IProxyRequestContext' could be found (are you missing a using directive or an assembly reference?)
и когда я получаю это не ошибка, он возвращает тот же вывод "output": "".
1 ответ
Чтобы иметь возможность доступа к телу как к объекту в жидком шаблоне, вам необходимо установить Content-Type
заголовок к application/json
как упомянуто в документах.
Если ваши запросы уже отправляют этот заголовок, он должен работать и без его настройки.
Такая политика в inbound
раздел гарантирует, что он работает как положено
<set-header name="Content-Type" exists-action="override">
<value>application/json</value>
</set-header>
<set-body template="liquid">{{body.json}}"}</set-body>
Что касается доступа к нему через context
переменная, вы должны получить доступ к нему как context.Request.Body.As<string>()
как уже упоминалось в документации, так что-то вроде этого
<set-body>@(context.Request.Body.As<string>())</set-body>
Официальная ссылка на set-body
кажется, нет проблем, которые вы упомянули.
Был ли другой документ, на который вы ссылаетесь? Если его на docs.microsoft.com
Вы можете открыть вопрос в конце каждого документа.