2

我见过很多类似的问题,我已经尝试了所有可能的答案,但我的问题仍然是一样的。基本上,我有以下 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();

有什么想法我可能做错了吗?

4

2 回答 2

1

你可以看看这篇文章和接受的答案。它表明:

  1. 为了发布,您需要以 FORM 的形式进行设置;
  2. 您需要取消 dataType 和 contentType 参数。

我想我明白了!您的 contentType 参数:

它需要是“application/json;charset=utf-8”

“json”后面有一个逗号。

于 2012-11-12T16:30:58.223 回答
0

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

于 2012-11-12T22:29:39.810 回答