为啥此 CORS 请求失败?
Posted
技术标签:
【中文标题】为啥此 CORS 请求失败?【英文标题】:Why is this CORS Request failing?为什么此 CORS 请求失败? 【发布时间】:2014-11-23 05:19:00 【问题描述】:我正在尝试使用以下代码从 Web api 获取值,目前是硬编码的。 然而,它会导致 100% 的“错误”部分,我不知道为什么。 欢迎任何帮助。
function SignIn()
$.ajax(
type: 'GET',
url: 'http://localhost:1200/Api/Values/3',
dataType: "jsonp",
crossDomain: true,
xhrFields:
'withCredentials': true
,
headers:
'Access-Control-Allow-Origin': '*'
,
success: function (data)
debugger;
alert(data);
,
error: function (xhr, ajaxOptions)
debugger;
alert(xhr.status);
alert(ajaxOptions);
);
服务器端:
[EnableCors("Access-Control-Allow-Origin", "*", "*")]
public string Get(int id)
return "Name: 'Foo', Id: '1234',Rank: 7";
Web.Config(服务器):
<system.webServer>
<validation validateIntegratedModeConfiguration="false" />
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
</customHeaders>
</httpProtocol>
</system.webServer>
【问题讨论】:
您是否检查了控制台的“网络”选项卡以查看按头发送和接收的内容? 接受:/;接受编码:gzip,放气;接受语言:nl,en-US;q=0.7,en;q=0.3 ;用户代理:Mozilla/5.0 (Windows NT 6.1; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0 JSONP 不是 CORS。你不应该使用 JSONP。 那你能给我举个例子来说明如何制作和解析 CORS 请求吗? 【参考方案1】:对于jsonp
,您必须定义一个回调函数。小心,JSON 想要键和值的双引号:
[EnableCors("Access-Control-Allow-Origin", "*", "*")]
public string Get(int id)
return "callback(\"Name\": \"Foo\", \"Id\": \"1234\",\"Rank\": 7)";
现在是阿贾克斯:
function SignIn()
$.ajax(
type: 'GET',
url: 'http://localhost:1200/Api/Values/3',
dataType: "jsonp",
jsonpCallback: "callback",
xhrFields:
'withCredentials': true
,
success: function (data)
debugger;
alert(data);
,
error: function (xhr, ajaxOptions)
debugger;
alert(xhr.status);
alert(ajaxOptions);
);
或者您可以通过将jsonp
更改为json
来尝试您的代码,以获取dataType
。
【讨论】:
进行您要求的修改(不是 jsonp 到 json),我得到了同样的错误。重命名为 json 又给了我一个 cors 错误。 奇怪,你不能正常使用jsonp
得到CORS错误。错误在哪里?
在 ajax 中,他跳入了“错误”部分,xhr.status = 200 和 ajaxoptions = parsererror。你有工作版本吗?
遗憾的是,这也没有奏效。我只想读取另一个网站返回的 json 或 xml 结果,在这种情况下是我的 api ...
对不起。您可以尝试删除“回调(…)”后的分号吗?以上是关于为啥此 CORS 请求失败?的主要内容,如果未能解决你的问题,请参考以下文章
在对 Apache2 进行安全更新后,我的 CORS 请求开始失败。我不知道为啥。
为啥在 Firefox 中向 google Drive Sheet 发出的这个 CORS 请求会失败? (在 Chrome 中工作)