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

И, наконец, давайте установим язык на C #, назовем его «HandlingGetAndPost» и установите аутентификацию на Anonymous:

Мы снова получаем шаблон 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. Часть 3. Обработка HTTP-запросов GET и POST-запросы
Мнения, высказанные участниками Java Code Geeks, являются их собственными. |
