Ajax跨域GET工作,PUT / POST获取跨域错误

时间:2018-03-19 18:29:43

标签: javascript jquery ajax

相当于标题所说的内容。我有一个在GET上运行良好的ajax调用,但是PUT给了我跨域错误:

  

阻止跨源请求:同源策略禁止在http://myDomainPC:6764/Forms/MyAction/2读取远程资源。 (原因:缺少CORS标题'Access-Control-Allow-Origin'。

这是代码。电话的网址是

"http://myDomainPC:6764/Forms/MyAction/" + (InspectionID != 0 ? InspectionID : "")

如果未通过查询字符串传递,则检验ID的默认值为0。

我已根据此SO帖子添加了扩展标头属性(但没有更改):jquery $.ajax cross-domain GET works but not POST

$.ajax({
    url: ajaxDataSaveInspectionURL,
    data: pageHeader,
    dataType: "json",
    type: "PUT",
    crossDomain: true,
    headers: {  "Access-Control-Allow-Origin": "*", 
    "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, OPTIONS",
    "Access-Control-Allow-Headers": "accept, origin, authorization, content-type, content-length, connection, x-requested-with, user-agent"},
    contentType: "application/json",
    success: function(result){
        //do stuff here
    },
    error: function(xhr, settings){
        switch (xhr.status) {
            case 404: //and other statuses...
                //do stuff here
                break;                
        }
    }).done(function (data) {
           //do stuff here too
    });

另一位开发人员已经确认我们正在调用的API已正确设置为接受来自任何地方的请求。

这里发生了什么,我需要改变以获得除错误之外的东西?

2 个答案:

答案 0 :(得分:-1)

Access-control-allow标头(CORS标头)是响应标头,应由您请求的服务设置。在你的情况下API。在进行ajax调用时,您无需将它们设置为请求标头。

您可以在此处了解有关CORS的更多信息https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS

enter image description here

干杯!

答案 1 :(得分:-1)

经过大量调查后发现问题是双重的:

  1. 数据有效负载包含多个DateTime字段,这些字段未获得" T"日期和时间部分之间。这意味着它无法反序列化为DateTime对象。因此它会产生500错误。

  2. 该服务是用.Net Core编写的。因为DateTime值没有正确地反序列化,所以它会抛出代码,服务不能处理它,从而产生一个错误,该错误不会正确地传达给消费者,也不能传递正确的500。正文并且不对服务应用正确的权限。这是一个.Net Core问题,而不是代码问题。