Статьи

Функции Azure. Часть 3. Обработка HTTP-запросов GET и POST-запросов

Обслуживание статических страниц интересно, но реальное приложение требует ввода от пользователя, а в Интернете это в основном делается путем отправки строк запроса в HTTP-запросе GET или путем публикации данных в HTTP-запросе POST. Давайте посмотрим, как мы можем справиться с этим в функциях Azure.

Итак, давайте перейдем к нашему приложению функции и создадим новую функцию:

Функции Azure

Как и раньше, эта функция будет иметь триггер HTTP:
Функции Azure
И, наконец, давайте установим язык на C #, назовем его «HandlingGetAndPost» и установите аутентификацию на Anonymous:

Функции Azure
Мы снова получаем шаблон HTTP-функции Azure по умолчанию для C #, который в этом случае также содержит много кода, относящегося к этому примеру! Примеры по умолчанию используют req.GetQueryNameValuePairs().FirstOrDefault(q => string.Compare(q.Key, "name", true) == 0) для извлечения первого параметра с именем «name», который входит в строку запроса.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
using System.Net;
public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
{
    log.Info("C# HTTP trigger function processed a request.");
    // parse query parameter
    string name = req.GetQueryNameValuePairs().FirstOrDefault(q => string.Compare(q.Key, "name", true) == 0).Value;
    if (name == null)
    {
        // Get request body
        dynamic data = await req.Content.ReadAsAsync<object>();
        name = data?.name;
    }
    return name == null
        ? req.CreateResponse(HttpStatusCode.BadRequest, "Please pass a name on the query string or in the request body")
        : req.CreateResponse(HttpStatusCode.OK, "Hello " + name);
}

Мы добавим еще немного кода, чтобы функция могла обрабатывать как запросы GET, так и POST, и в зависимости от типа запроса, который она получает, анализирует строку запроса или отправку полезной нагрузки в запросе POST:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#r "Newtonsoft.Json"
using System.Net;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
 
public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
{
    log.Info("C# HTTP trigger function processed a request.");
    string name = null;
    if (req.Method == HttpMethod.Post)
    {
        log.Info($"POST method was used to invoke the function");
        string body = await req.Content.ReadAsStringAsync();
        dynamic b = JObject.Parse(body);
        name = b.name;
    }
    else if (req.Method == HttpMethod.Get)
    {
        log.Info($"GET method was used to invoke the function");
        name = req.GetQueryNameValuePairs().ToDictionary(x => x.Key, x => x.Value)["name"];
    }
    return name == null
        ? req.CreateResponse(HttpStatusCode.BadRequest, "Please pass a name on the query string or in the request body")
        : req.CreateResponse(HttpStatusCode.OK, "Hello " + name);
}

Используя req.Method мы проверяем, был ли выполнен запрос с помощью глагола GET или POST, и на основании этого обрабатываем строку запроса или тело запроса, чтобы получить значение для «name». Довольно просто.

Итак, давайте проверим это через портал Azure. В правой части редактора находится вкладка «Тест», где мы можем установить параметры запроса и тело запроса, выбрать используемый метод HTTP и отправить данные в службу, нажав «Выполнить» в правом нижнем углу. угол.

Функции Azure

Работает как шарм

См. Оригинальную статью здесь: Функции Azure. Часть 3. Обработка HTTP-запросов GET и POST-запросы

Мнения, высказанные участниками Java Code Geeks, являются их собственными.