Как создать функцию POST Azure, которая может выполнять привязку модели к телу? - PullRequest
0 голосов
/ 07 марта 2019

С помощью GET я могу просто добавить параметр в определение функции:

[FunctionName("GetKittenById")]
public static async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Function, "get", Route = "GetKittenById/{kittenId}")] HttpRequest req,
    string kittenId,
    ILogger log) { ... }

Я хочу сделать то же самое с POST.Однако, если я добавлю параметр и сделаю это:

[FunctionName("CreateKitten")]
public static async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Function, "POST", Route = "CreateKitten")] HttpRequest req,
    Kitten kitten,
    ILogger log) { ... }

Тогда моя функция выдает ошибку, когда она POST'd to.

[03/03/2019 16:17: 00] Произошла необработанная ошибка хоста.
[03/07/2019 16:17:00] Microsoft.Azure.WebJobs.Host:
«CreateKitten» нельзя вызвать из Azure WebJobs SDK.В нем отсутствуют атрибуты Azure WebJobs SDK?.

Я не могу найти в Google, как это сделать.Я предполагаю, что есть встроенная привязка, потому что когда вы делаете GET, вы можете указать, хотите ли вы JSON или XML.Я хочу сделать то же самое в обратном порядке и позволить фреймворку обрабатывать его в случае, если они публикуют JSON или XML.

Есть ли способ сделать это автоматически или мне нужно начать ковыряться в HttpRequest и десериализоватьcontent?


Я обнаружил, что вы можете заменить HttpRequest req на Kitten kitten, и он будет выполнять привязку модели, но мне нужно сохранить доступ к HttpRequest, чтобы иметь возможность читатьнекоторые пользовательские заголовки аутентификации.

Есть ли способ получить оба из них, не используя мои собственные?Проверка того, отправили ли они JSON или XML, и написание собственного кода для привязки модели - это просто проблема, так как я могу получить http-контекст.

1 Ответ

1 голос
/ 11 марта 2019

Вы можете сделать это, заменив HttpRequest на тип, который вы хотите использовать в самой привязке HttpTrigger, вот так:

enter image description here

Если вы также хотите получить заголовок из HttpRequest, добавьте тип HttpRequest в качестве другого параметра и прочитайте значения заголовка, как показано ниже. Здесь я добавил заголовок «custom-header» во время процедуры POST и считал его из объекта HttpRequest. Тело запроса будет автоматически проанализировано для типа котенка

enter image description here

...