我有一个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请求。我该如何解决?