I have the following code in my Function App
using System.Net;
public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
{
   var data = await req.Content.ReadAsAsync<PostData>();
   var sid = data.sid;
   log.Info($"sid ={sid}");
   return req.CreateResponse(HttpStatusCode.OK, $"Current Time : {DateTime.Now}"); 
}
public class PostData 
{
   public string sid { get; set; }
}
The error message is
No MediaTypeFormatter is available to read an object of type 'PostData' from content with media type 'application/x-www-form-urlencoded'.
How do I set the function up to work with the correct media type?
[Update]
If I change the code to
var content = req.Content;
var jsonContent = await content.ReadAsStringAsync();
log.Info(jsonContent);
I can see the jsonContent text logged starting with
ToCountry=AU&ToState=&SmsMessageSid=SM8cac6c6a851  etc
But I am unclear on how to go about extracting the data I need.
I tried adding
 dynamic results = JsonConvert.DeserializeObject<dynamic>(jsonContent);
and
using Newtonsoft.Json;
however this causes a script compilation error
[Update] Studying the sample code on the Integration Tab
Example C# code for a GitHub WebHook function
#r "Newtonsoft.Json"
using System;
using System.Net;
using System.Threading.Tasks;
using Newtonsoft.Json;
public static async Task<object> Run(HttpRequestMessage req, TraceWriter log)
{
    string jsonContent = await req.Content.ReadAsStringAsync();
    log.Info("Hi 1");   // does log
    dynamic data = JsonConvert.DeserializeObject(jsonContent);
    log.Info("Hi 2");  // does not log
    return req.CreateResponse(HttpStatusCode.OK, $"Current Time : {DateTime.Now}"
    });
}
This produces an error
System.AggregateException : One or more errors occurred. ---> Unexpected character encountered while parsing value: T. Path '', line 0, position 0.
   at Microsoft.Azure.WebJobs.Script.Description.DotNetFunctionInvoker.GetTaskResult(Task task)
 
    