参数为null

时间:2012-11-12 16:17:31

标签: asp.net asp.net-mvc-4 asp.net-web-api

我见过许多类似的问题,我已经尝试了所有可能的答案,但我的问题仍然是一样的。基本上,我有以下ajax调用。

var obj = {
    Duration: 12000,
    Errors: 2
};
var post = $.ajax({
    url: APIUrl,
    data: JSON.stringify(obj),
    type: "POST",
    cache: false,
    dataType: 'json',
    contentType: 'application/json, charset=utf-8'
});

这是我的视图模型。

public class TargetBasedViewModel
{
    public int Duration{ get; set; }
    public int Errors{ get; set; }
}

这是我的控制器。

    [HttpPost]
    public HttpResponseMessage Post(TargetBasedViewModel test)
    {
        return new HttpResponseMessage(HttpStatusCode.OK);
    }

问题是参数保持为空。 我已经使用Fiddler来检查请求,它看起来很好,所有属性都在那里,我甚至可以检查JSON对象并确保我的值实际上被发送到服务器。我已经阅读了很多文章,甚至尝试将[ModelBinder]和[FromBody]添加到参数中,但仍然没有运气。 我还尝试将其添加到我的Application_Start()

GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings = new JsonSerializerSettings();

任何想法我可能做错了什么?

2 个答案:

答案 0 :(得分:0)

您可以查看this post和接受的答案。它表明:

  1. 要发布POST,您需要以FORM的形式进行设置;
  2. 您需要取消dataType和contentType参数。
  3. 我认为我得到了它!您的contentType参数:

    它必须是“application / json; charset = utf-8”

    “json”之后你有一个COMMA。

答案 1 :(得分:0)

检查控制器上的ModelState属性。在那里记录反序列化错误。您可能会发现反序列化失败的原因。