0

我有一个硬 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

求助,可能是什么问题!谢谢!

4

1 回答 1

1

对于支持 CORS 的浏览器跨域发出 POST 请求(这是您与Access-Control标头一起使用的),在请求之前,浏览器首先发送一个预检请求,这是一个 HTTPOPTIONS请求,询问服务器是否可以向其发送 POST 请求。您可以添加另一个响应 OPTIONS 请求的操作,或者您可以实现对 WCF 的完整 CORS 支持 - 这不是太简单,但我已经在http://blogs.msdn.com/b/carlosfigueira/上写过它archive/2012/05/15/implementing-cors-support-in-wcf.aspx以及完成这项工作所需的步骤。

于 2013-04-10T07:05:32.483 回答