Neil P
Neil P

Reputation: 3210

WebApi - why is my post variable always null?

I'd like to be able to read a post variable from my controller method.

I currently have the below code:

[HttpPost]
public IHttpActionResult BuildPartitions([FromBody]string PartitionBuildDate)
{
}

I'm using the below code to test:

using (HttpClient httpClient = new HttpClient())
{
    var values = new Dictionary<string, string>
    {
        { "PartitionBuildDate", "24-May-2017" }
    };
    var content = new FormUrlEncodedContent(values);
    var response = httpClient.PostAsync("http://localhost:55974/api/Controller/BuildPartitions", content);
    var responseString = response.Result.Content;
}

Looking online, this looks correct for both sending and receiving a post variable in C#, however the PartitionBuildDate variable is always null.

Upvotes: 0

Views: 69

Answers (1)

mridula
mridula

Reputation: 3281

Try adding the content-type header. I have used Newtonsoft JSON.NET for JSON conversion:

string postBody = JsonConvert.SerializeObject(yourDictionary);

var response = client.PostAsync(url, new StringContent(postBody, Encoding.UTF8, "application/json"));

var responseString = response.Result.Content;

Also, on your web API side, try wrapping your POST parameters inside a class:

public class PostParameters
{
    public string PartitionBuildDate {get;set;}
}

[HttpPost]
public IHttpActionResult BuildPartitions([FromBody]PostParameters parameters)
{
    //you can access parameters.PartitionBuildDate
}

Upvotes: 1

Related Questions