对预检请求的响应未通过访问控制检查:请求的资源上没有“Access-Control-Allow-Origin”标头

时间:2015-11-20 21:35:48

标签: asp.net ajax url post

我有一个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&param2=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);
        }
    });

2 个答案:

答案 0 :(得分:4)

您没有序列化数据。第二个电话应该是

data: JSON.stringify({param1: "param1", param2: "param2chriwil"}),

请参阅: jQuery ajax, how to send JSON instead of QueryString

修改

此外,如果您指定方法签名,例如Post(String param1, String param2),引擎会认为param1param2将通过查询字符串 - 所以难怪您的第二次调用失败(您还没有' t在url中指定了param1param2;如果你想通过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