如何在Chrome中启用CORS。预检405错误

时间:2016-09-06 14:31:23

标签: json wcf google-chrome aurelia-http-client

我有一个wcf restful服务,我需要在Chrome中工作。我已经阅读并添加了各种标题等,但没有任何工作。 POST在IE中工作正常,但是当我进入Chrome时,我在OPTIONS请求上收到405错误,告诉我该方法是不允许的。我已经阅读过一些人在他们的global.asax文件中添加内容的地方了,但实际上并不觉得这应该是必要的。我甚至没有一个全局的asax文件,并且仅仅为了开发工作而开发一个仅用于开发 的文件似乎很疯狂。

我正在使用Aurelia的HTTP-Client库,它只使用一个简单的XMLHttpRequest。以下是它的配置方式:

this.Client = new HttpClient()
            .configure(x => {
                x.withBaseUrl("http://localhost/MyServices/MyService.svc/")

            });

我正在这样打电话:

this.Client.post("PostData/" + name,
            {
                version: 1
            })
            .then(resp => {
                console.log(resp);
            })

以下是我在WCF Restful service WebConfig中添加的标头:

<add name="Access-Control-Allow-Origin" value="*" />

<!-- Not sure if these even do anything -->
<add name="Access-Control-Allow-Headers" value="Content-Type, Accept, X-Requested-With" />
<add name="Access-Control-Allow-Methods" value="OPTIONS, GET, POST" /> 

然后在我的服务中:

[OperationContract]
[WebInvoke(Method = "POST", UriTemplate = "/PostData/{name}", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped)]
Data myData(byte id, string name);

就像我上面说的那样,它在IE中运行良好,但是chrome给了我一个预检错误。这是一个小提琴响应的片段:

HTTP/1.1 405 Method Not Allowed

Entity
Content-Length: 1565
Content-Type: text/html; charset=UTF-8

Security
Access-Control-Allow-Headers: Content-Type, Accept, X-Requested-With
Access-Control-Allow-Methods: OPTIONS, GET, POST
Access-Control-Allow-Origin: *
Allow: POST

我还发现,如果我将x.withHeader("Content-Type", "application/json; charset=utf-8")添加到我的Http-Client配置中,Chrome甚至不会执行GET请求。它抛出错误。

总而言之,我可以在Chrome中执行GET请求而不是POST请求。我该如何解决?

0 个答案:

没有答案