Jquery WebAPI-Ajax POST Json调用(跨域)-模型绑定器不工作

Jquery WebAPI-Ajax POST Json调用(跨域)-模型绑定器不工作,jquery,json,cors,asp.net-web-api,Jquery,Json,Cors,Asp.net Web Api,在客户端: var data = {Title":"Some Title","Description":"Something"} ; $.support.cors = true; $.ajax({ type: 'POST', dataType: 'json', url: apiUrl + "/Save", data: data, contentType: 'application/x-www-form-urlencoded', success:

在客户端:

var data = {Title":"Some Title","Description":"Something"} ;

$.support.cors = true;

$.ajax({
    type: 'POST',
    dataType: 'json',
    url: apiUrl + "/Save",
    data: data,
    contentType: 'application/x-www-form-urlencoded',
    success: function (returnedData) {},
    error: function (xhr, ajaxOptions, thrownError) {},
    processData: false,
    async: false
});
在服务器端:

    [HttpPost]
    public ActionResult Save(DataModel data)
    {
        Response.AppendHeader("Access-Control-Allow-Origin", "*");
        Response.AppendHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");

        return null;
    }
这是数据模型:

public class DataModel
{
    public string Title { get; set; }
    public string Description { get; set; }
}
一切正常。但是,当它向“Save”控制器操作发出POST请求时,模型上的属性始终为null,并且不会从客户端获取值

请注意,这是对我的站点的“子域”的跨域请求(即从example.com调用api.example.com)

我错过了什么


提前谢谢大家

首先,使用以下选项更改ajax请求:

    contentType : 'application/json', dataType: 'json'.
之后,将此控制器方法添加到控制器:

    [HttpOptions]
    public ActionResult Save()
    {
        Response.AppendHeader("Access-Control-Allow-Origin", "*");
        Response.AppendHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");

        return null;
    }

其他类似的ajax请求是否有效?谢谢@KevinB,我应该怎么做?顺便说一句,这将在Phonegap中运行,所以我相信只要它在WebKit上工作,就可以了。是的,在Phonegap中你确实需要iirc标志。啊,我看到了一些东西
processData
被设置为
false
,并且
data
是一个对象,因此它不会被发送。您应该将processData设置为true,或者(不是并且!)将contentType更改为json,并将对象解析为json(取决于api的要求)。我已尝试将processData设置为true;同样的问题。当我将contentType切换到“application/json”时,我在Chrome中得到了“No”访问控制允许来源“header is present”错误。。