Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Azure functions - How to read form data

How to read form data in Azure functions? I tried to do it in several ways, but always I get an error, eg.:

using System.Net;

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
{
    dynamic data = await req.Content.ReadAsFormDataAsync();

    return req.CreateResponse(HttpStatusCode.OK, $" {data}");
}

Error: Exception while executing function: Functions.FormTrigger. System.Net.Http.Formatting: No MediaTypeFormatter is available to read an object of type 'FormDataCollection' from content with media type 'application/json'.

I checked request content and I'm getting request as multipart/form-data:

" ------WebKitFormBoundary47wKq7pk9Fcc4H9J\r\nContent-Disposition: form-data; name=\"name\"\r\n\r\nsdgs\r\n
------WebKitFormBoundary47wKq7pk9Fcc4H9J\r\nContent-Disposition: form-data; name=\" _replyto\"\r\n\r\[email protected]\r\n
------WebKitFormBoundary47wKq7pk9Fcc4H9J\r\nContent-Disposition: form-data; name=\"message\"\r\n\r\nsdgsd\r\n
------WebKitFormBoundary47wKq7pk9Fcc4H9J--\r\n"

Thank you for any hints.

like image 806
Pawel Maga Avatar asked Jan 05 '23 22:01

Pawel Maga


2 Answers

As the request contains "application/x-www-form-urlencoded" type of contents, you need to convert the input to NameValueCollection in order to read input:

NameValueCollection col = req.Content.ReadAsFormDataAsync().Result; 
return req.CreateResponse(HttpStatusCode.OK, $" {col[0]}");

You can also pass Key string instead of Index which would make the code more readable and self-explanatory

like image 188
Nirman Avatar answered Jan 07 '23 11:01

Nirman


In order to read form data, there is the method ReadAsMultipartAsync:

data = await req.Content.ReadAsMultipartAsync().ConfigureAwait(false);
like image 30
Majix Avatar answered Jan 07 '23 10:01

Majix