我有一个CORS Web API控制器,如下所示
[EnableCors(origins: "*", headers: "*", methods: "*")]
public class AddNewLocationController : ApiController
{
public String Post(String param1, String param2)
{
return "Param1: " + param1 + ", Param2: " + param2;
}
}
我想使用Ajax将数据传递给此控制器。当我在url中添加参数时,命令成功:
$.ajax({
url: 'http://localhost:21626/api/AddNewLocation?param1=test1¶m2=chriwil'**,
dataType: "json",
type: "POST",
contentType: 'application/json; charset=utf-8',
async: true,
processData: false,
cache: false,
success: function (data) {
console.log(data);
},
error: function (xhr) {
console.log(xhr);
}
});
当我尝试使用ajax调用的data属性传递数据时,我收到错误“对预检请求的响应未通过访问控制检查:否'Access-Control-Allow-Origin'标头是出现在所请求的资源“。
$.ajax({
url: 'http://localhost:21626/api/AddNewLocation',
dataType: "json",
type: "POST",
data: {param1: "param1", param2: "param2chriwil"},
contentType: 'application/json; charset=utf-8',
async: true,
processData: false,
cache: false,
success: function (data) {
console.log(data);
},
error: function (xhr) {
console.log(xhr);
}
});
答案 0 :(得分:4)
您没有序列化数据。第二个电话应该是
data: JSON.stringify({param1: "param1", param2: "param2chriwil"}),
请参阅: jQuery ajax, how to send JSON instead of QueryString
修改强>
此外,如果您指定方法签名,例如Post(String param1, String param2)
,引擎会认为param1
和param2
将通过查询字符串 - 所以难怪您的第二次调用失败(您还没有' t在url中指定了param1
和param2
;如果你想通过json发送参数,请使用此签名:
public class Model
{
public string param1 { get; set; }
public string param2 { get; set; }
}
public String Post(Model model)
{
return "Param1: " + model.param1 + ", Param2: " + Model.param2;
}
答案 1 :(得分:0)
为Access-Control-Allow-Origin
中的预检响应添加global.asax.cs
标题为我工作。请参阅https://stackoverflow.com/a/46046766/2847061