0

I am having some problems getting my ASP.NET MVC application to parse my model, i simply just get "null".

This is my ASP.NET MVC action

public AdobeReturnSet<UserModel> Post([FromBody]UserModel model)

I have also tried without the [FromBody], that did not help.

This is my model

public class UserModel
    {
        public int AdobeId { get; set; }

        [Required]
        [StringLength(500)]
        public string FristName { get; set; }
        [Required]
        [StringLength(500)]
        public string LastName { get; set; }
        [Required]
        [StringLength(250)]
        [EmailAddress]
        public string Email { get; set; }
        [Required]
        public string OrganizationIdentification { get; set; }

        public string Organization { get; set; }
        public string OrganizationFull { get; set; }
}

And this is how i send the request

using (WebClient wc = new WebClient())
            {
                wc.Headers[HttpRequestHeader.Accept] = "application/json";
                wc.Headers[HttpRequestHeader.AcceptCharset] = "utf-8";
                wc.Headers[HttpRequestHeader.ContentType] = "application/json";
                result = wc.UploadString(url, "POST", data);
            }

The url is correct as the correct action is reached and this is the value of data:

{"AdobeId":0,"FristName":"Kasper Rune","LastName":"Søgaard","Email":"krus@arcanic.dk","OrganizationIdentification":null,"Organization":null,"OrganizationFull":null}

But when the request reaches my action is the model simply null. It is a ApiController if that changes anything.

4

1 回答 1

2

Looks like an encoding problem. Try using the UploadData method instead and use UTF-8 encoding:

using (var wc = new WebClient())
{
    var data = Encoding.UTF8.GetBytes(@"{""AdobeId"":0,""FristName"":""Kasper Rune"",""LastName"":""Søgaard"",""Email"":""krus@arcanic.dk"",""OrganizationIdentification"":null,""Organization"":null,""OrganizationFull"":null}");

    wc.Headers[HttpRequestHeader.Accept] = "application/json";
    wc.Headers[HttpRequestHeader.ContentType] = "application/json";
    byte[] result = wc.UploadData(url, "POST", data);
    string json = Encoding.UTF8.GetString(result);
}

Alternatively you could use the new HttpClient:

using (var client = new HttpClient())
{
    client.DefaultRequestHeaders.ConnectionClose = true;
    var value = new
    {
        AdobeId = 0,
        FristName = "Kasper Rune",
        LastName = "Søgaard",
        Email = "krus@arcanic.dk",
    };
    var result = client.PostAsJsonAsync(url, value).Result;
    if (result.IsSuccessStatusCode)
    {
        string json = result.Content.ReadAsStringAsync().Result;
    }
}

Also you might have a typo at FristName which should probably be FirstName.

于 2013-08-14T12:00:06.630 回答