POST后的JSON对象以API控制器中的默认值结束

时间:2014-04-26 16:44:31

标签: c# jquery json asp.net-web-api asp.net-mvc-5

我尝试使用jQuery的AJAX函数将一些数据发布到我的Web API,但MVC并没有在另一端成功地将其序列化 - 它只是保留了模型的默认值。 Some seemingly useful answers似乎无法解决我的问题,而且一点都不复杂,所以我不确定出了什么问题。

我的模特:

public class SavedLevel
{
    public int ID { get; set; }
    public string Data { get; set; }
}

AJAX请求:

var postData= {};
postData.ID = 12;
postData.Data = "hello";

$.ajax(
{
    url: "api/level/post",
    type: "POST",
    contentType: "application/json; charset=utf-8",
    data: JSON.stringify({data : postData}),
    dataType: "json",
    success: function (data)
    {
        //Something
    },
    error: function (jqXHR, textStatus, errorThrown)
    {
        //Something
    }
});

API控制器。

[Route("api/level/post")]
[HttpPost]
public HttpResponseMessage PostLevel(SavedLevel data)
{
    Debug.WriteLine("id : " + data.ID);
    Debug.WriteLine("data : " + data.Data);

    return new HttpResponseMessage(HttpStatusCode.OK);
}

请求正文。

{"data":{"ID":12,"Data":"hello"}}

Debug控制台输出0"",而不是预期的12"hello"

感谢阅读。

注意:我尝试使用dynamic对象并且根本无法工作 - 我甚至无法检查它是否为空。

1 个答案:

答案 0 :(得分:1)

将您的data更改为:

data: JSON.stringify(postData),

因此请求正文变为:

{"ID":12,"Data":"hello"}

C#期待SavedLevel对象,但是您正在发送包装在另一个对象中的对象。