我有一个很难的Microsoft Visual Studio 2008,我想从您的Web服务到WCF服务进行跨域查询,但它不起作用。
网页上的Ajax代码:
$.ajax (
url: "http:/сите.com/ApplicationController.svc/HelloPost/"
type: "POST",
dataType: "json",
contentType: "application/json",
success: function (data) {
alert (data);
},
error: function (jqXHR, textStatus, errorThrown) {
alert (jqXHR textStatus errorThrown);<br/>
}
});
但是我的WCF服务:
[OperationContract]
[WebInvoke (Method = "POST", UriTemplate = "HelloPost /", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare)]
[JSONPBehavior (callback = "callback")]
String GetPostHello (Stream data);
public String GetPostHello (Stream data)
{
HttpContext.Current.Response.AddHeader ("Access-Control-Allow-Origin", "*");
if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
{
HttpContext.Current.Response.AddHeader ("Access-Control-Allow-Methods", "GET, POST");
HttpContext.Current.Response.AddHeader ("Access-Control-Allow-Headers", "Content-Type, Accept");
HttpContext.Current.Response.AddHeader ("Access-Control-Max-Age", "1728000");
HttpContext.Current.Response.End ();
return null;
}
return "Hello";
}
当一个GET请求与其工作的域,但尝试发出POST请求返回此标头:
Content-Type application/json
Accept application/json, text/javascript, */*;q=0.01
帮助,可能是什么问题!谢谢!
答案 0 :(得分:1)
对于支持CORS的浏览器(这是您使用 Access-Control 标头的浏览器)跨域进行的POST请求,在请求之前,浏览器首先发送< em> preflight 请求,这是一个HTTP OPTIONS
请求,询问服务器是否可以向其发送POST请求。您可以添加另一个响应OPTIONS请求的操作,或者您可以为WCF实现完整的CORS支持 - 这不是太简单,但我已经在http://blogs.msdn.com/b/carlosfigueira/archive/2012/05/15/implementing-cors-support-in-wcf.aspx上写了相关内容,并且需要执行此操作所需的步骤。