Serving static pages is interesting, but a real application needs input from the user, and in the web this is mostly done by sending a query strings in an HTTP GET request, or by posting data in an HTTP POST request. Letโs see how we can handle this in Azure Functions.
So letโs go to our function app and create a new function:
๐ Azure Functions
As before, this function will have an HTTP trigger:
๐ Azure Functions
And lastly letโs set the language to C#, name it โHandlingGetAndPostโ, and set the authentication to Anonymous:
๐ Azure Functions
Once again we get the default Azure HTTP Function template for C#, which in this case also contains much code that is relevant to this example! The default examples uses req.GetQueryNameValuePairs().FirstOrDefault(q => string.Compare(q.Key, "name", true) == 0) to fetch the first parameter called โnameโ that comes in the query string.
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);
}We will add some more code so the function can handle both GET and POST requests, and depending on the type of request it receives, parse the query string or the payload send in the POST request:
#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);
}Using req.Method we check if the request was done with the GET or POST verb, and based on that we process the query string or the body of the request to fetch the value for โnameโ. Pretty straightforward.
So letโs test this through the Azure portal. On the right side of the editor there is a โTestโ tab where we can set the query parameters and the request body, select which HTTP method to use, and send the data to the service by clicking on โRunโ on the lower right corner.
Works like a charm
| Published on Java Code Geeks with permission by Arieh Bibliowicz, partner at our JCG program. See the original article here: Azure Functions โ Part 3: Handling HTTP Query GET and POST Requests Opinions expressed by Java Code Geeks contributors are their own. |
Thank you!
We will contact you soon.
Arieh BibliowiczOctober 24th, 2018Last Updated: October 23rd, 2018

This site uses Akismet to reduce spam. Learn how your comment data is processed.