gpt4 book ai didi

c# - 选项预检未在 jQuery 中处理

转载 作者:行者123 更新时间:2023-11-30 12:59:46 25 4
gpt4 key购买 nike

我在 localhost:63342 有一个网页,在该网页中有一个 jQuery ajax 调用,到我在 localhost:55000 的网络服务服务器。在网络服务中,我设置了访问控制 header 。

在 Chrome 的开发者工具的“网络”选项卡中,我可以看到已发送 OPTIONS 预检信息,并且响应 header 具有以下内容,看起来不错。

Access-Control-Allow-Headers:x-requested-with, X-Auth-Token, Content-Type, Accept, Authorization
Access-Control-Allow-Methods:POST, OPTIONS, GET
Access-Control-Allow-Origin:*
Cache-Control:private
Content-Length:0
Date:Fri, 06 Jun 2014 13:30:58 GMT
Server:Microsoft-IIS/8.0

但是,对 OPTIONS 请求的响应命中了我的 jQuery ajax 调用的错误函数。开发人员工具向我显示浏览器准备了 POST,但失败了,因为它认为资源没有设置 Access-Control-Allow-Origin header 。浏览器不会尝试发送 POST。这是来自浏览器控制台的错误消息:

XMLHttpRequest cannot load http://localhost:55000/webservice/ws.svc/CreateOuting. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:63342' is therefore not allowed access. 

就好像 jQuery 干扰了 OPTIONS、POST 过程。关于我应该怎么做才能完成这项工作有什么想法吗?

这是我的ajax调用

    $.ajax({
type: 'POST',
data: JSON.stringify(obj),
headers: { "Content-type": "application/json" },
url: base_url + 'CreateOuting',
crossDomain: true,
success: function (an_outing) {
$('#listviewOutings').listview('refresh', true);
$('#boxOutingName')[0].value = '';
myLib.OpenBasicPopup('Success', 'The outing name was saved.')
},
error: function (err) {
alert(err.statusText); // response to OPTIONS request ends up here
}
});

以下是我在服务器 (.NET C#) 上的方法中设置 header 的方式:

public bh_Outing CreateOuting(string strOuting) {
try
{
//for all cors requests
WebOperationContext.Current.OutgoingResponse.Headers.Add("Access-Control-Allow-Origin", "*");
//identify preflight request and add extra headers
if (WebOperationContext.Current.IncomingRequest.Method == "OPTIONS")
{
WebOperationContext.Current.OutgoingResponse.Headers.Add("Access-Control-Allow-Methods", "POST, OPTIONS, GET");
WebOperationContext.Current.OutgoingResponse.Headers.Add("Access-Control-Allow-Headers", "x-requested-with, X-Auth-Token, Content-Type, Accept, Authorization");
return null;
}

// do stuff

这是该方法的接口(interface)。我认为它还不完美,但我也不认为这是问题所在。

[WebInvoke(UriTemplate = "*", Method = "*", ResponseFormat = WebMessageFormat.Json)]
[OperationContract]
bh_Outing CreateOuting(string strOuting);

感谢您查看此内容。我真的被困住了。

更新,2014 年 6 月 17 日,美国东部时间下午 5:38

我在我的网络配置中添加了一个元素,如 this post ,这对我的结果没有任何影响。

最佳答案

这可能不是原因,但您是否尝试过在 jQuery 中启用 cors?在任何 cors ajax 请求之前:

jQuery.support.cors = true;

关于c# - 选项预检未在 jQuery 中处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24084002/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com