相当于标题所说的内容。我有一个在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已正确设置为接受来自任何地方的请求。
这里发生了什么,我需要改变以获得除错误之外的东西?
答案 0 :(得分:-1)
Access-control-allow标头(CORS标头)是响应标头,应由您请求的服务设置。在你的情况下API。在进行ajax调用时,您无需将它们设置为请求标头。
您可以在此处了解有关CORS的更多信息https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS
干杯!
答案 1 :(得分:-1)
经过大量调查后发现问题是双重的:
数据有效负载包含多个DateTime字段,这些字段未获得" T"日期和时间部分之间。这意味着它无法反序列化为DateTime对象。因此它会产生500错误。
该服务是用.Net Core编写的。因为DateTime值没有正确地反序列化,所以它会抛出代码,服务不能处理它,从而产生一个错误,该错误不会正确地传达给消费者,也不能传递正确的500。正文并且不对服务应用正确的权限。这是一个.Net Core问题,而不是代码问题。