I'm trying to pass a Dictionary<string,string> object as a parameter to my web api method but if I inspect the log file it always comes through with a count of 0:
Web api method:
[HttpPost]
[ActionName("SendPost")]
public void SendPost([FromBody] Dictionary<string,string> values)
{
    using (var sw = new StreamWriter("F:\\PostTest.txt", true))
    {
        sw.WriteLine("Number of items in the dictionary - " + values.Count);
    }
}
Logic which calls the web api:
public HttpResponseMessage Send(string uri, string value)
{
    HttpResponseMessage responseMessage = null;
    using (var client = new HttpClient())
    {
        client.BaseAddress = new Uri(URI);
        client.DefaultRequestHeaders.Accept.Clear();
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
        var content = new FormUrlEncodedContent
            (
                new Dictionary<string, string> { { "value", value } }
            );
        responseMessage = client.PostAsync(uri, content).Result;
    }
    return responseMessage;
}
                The problem is with the fact that you're saying the content-type is "application/json", yet you pass it as FormUrlEncodedContent. You need to either use StringContent and serialize the content to JSON yourself, or you can use the extention method HttpClientExtensions.PostAsJsonAsync which serializes the content to JSON for you:
public async Task<HttpResponseMessage> SendAsync(string uri, string value)
{
    using (var client = new HttpClient())
    {
        client.BaseAddress = new Uri(URI);
        client.DefaultRequestHeaders.Accept.Clear();
        client.DefaultRequestHeaders.Accept.Add(
                        new MediaTypeWithQualityHeaderValue("application/json"));
        return await client.PostAsJsonAsync(uri, content);
    }
}
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With