0

我正在尝试使用 javascript 通过 http 跨域调用 WCF 服务。

我已将Access-Control-Allow-Origin标头添加到要调用的操作中,如下所示:

WebOperationContext.Current.OutgoingResponse.Headers.Add("Access-Control-Allow-Origin", "*");

但是,当我使用 jquery.ajax 发布时,我得到:

Origin http://server/ is not allowed by Access-Control-Allow-Origin.

更糟糕的是它甚至发生在我的本地机器上:

XMLHttpRequest cannot load http://localhost:8201/wcfservice. Origin http://localhost/ is not allowed by Access-Control-Allow-Origin. (observed in Chrome)

我在做一些根本错误的事情吗?

4

1 回答 1

1

您所做的对于 GET 请求(在启用 CORS 的浏览器中)很好 - 请求被发送到服务,如果服务具有 Access-Control-Allow-Origin 标头,浏览器会将其返回给应用程序) .

对于“不安全”的请求(即那些可能对服务造成副作用的请求,例如 POST、PUT 和 DELETE),浏览器首先发送一个预检请求,一个 OPTIONS 请求,它“询问”服务是否可以接受一个跨域请求。由于您的操作仅响应 POST 请求,因此它不会响应该请求并且浏览器将阻止它。

我写了一篇关于在 WCF 中实现 CORS 支持的一种方法的帖子,您可以在http://blogs.msdn.com/b/carlosfigueira/archive/2012/05/15/implementing-cors-support-in-wcf找到它.aspx。基本上,除了“正常”请求之外,您还需要处理 OPTIONS 请求。

于 2012-06-19T00:28:58.713 回答