Обслуживание статических страниц интересно, но реальное приложение требует ввода от пользователя, а в Интернете это в основном делается путем отправки строк запроса в 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, являются их собственными. |