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”错误。。