我正在尝试POST
来自jQuery / knockout网络应用的搜索请求。我按照for implementing CORS in WCF的说明进行了操作,并在服务中添加了以下内容:
[OperationContract]
[WebInvoke(Method = "OPTIONS", UriTemplate = "*")]
public void GetOptions()
{
}
搜索请求在Chrome和Firefox中运行良好。 Chrome会发送OPTIONS
请求,该请求已成功处理(200
),并且access-control
标头位于响应中,然后它会发送POST
,返回搜索结果。所以CORS预检工作正常。
但IE是另一回事。它还发送成功处理的OPTIONS
请求,并且access-control
标题位于响应中,但它只是...停止。它之后不会发送POST
请求,并且在开发人员工具中的状态为(aborted)
。
控制台的错误为XMLHttpRequest: Network Error 0x80070005, Access is denied.
,但OPTIONS
请求的状态为200
,即使尝试POST
也从未(我可以说)。所以我甚至都不知道被拒绝了什么。
requiredHeaders.Add("Access-Control-Allow-Origin", "*");
requiredHeaders.Add("Access-Control-Allow-Methods", "POST,GET,PUT,DELETE,OPTIONS");
requiredHeaders.Add("Access-Control-Allow-Headers", "X-Requested-With,Content-Type,Accept");
requiredHeaders.Add("Access-Control-Max-Age", "1728000");
这是客户方的要求:
$.ajax({
url: serviceUrl + "ExemptServices.svc/json/search",
method: "POST",
contentType: "application/json",
data: JSON.stringify(ko.mapping.toJS(self.Criteria)),
success: function (response) {
self.SearchResults(response.ResultData);
},
error: function (jqXHR, textStatus, errorThrown) {
alert("Error searching." + errorThrown);
}
});
我还应该提到Web和WCF服务器都在本地Intranet区域,并且所有内容都在同一个内部网络上,包括客户端。
这是来自fiddler的日志。只有OPTIONS
请求,没有尝试执行POST
:
OPTIONS http://ecydevws2/ustservice/ExemptServices.svc/json/search HTTP/1.1
Accept: */*
Origin: http://ecyapdevtcp
Access-Control-Request-Method: POST
Access-Control-Request-Headers: content-type, accept
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
Host: ecydevws2
Content-Length: 0
Connection: Keep-Alive
Pragma: no-cache
HTTP/1.1 200 OK
Cache-Control: private
Content-Length: 0
Server: Microsoft-IIS/7.5
X-AspNet-Version: 4.0.30319
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST,GET,PUT,DELETE,OPTIONS
Access-Control-Allow-Headers: X-Requested-With,Content-Type,Accept
Access-Control-Max-Age: 1728000
Set-Cookie: ASP.NET_SessionId=z35robabmzflsyp0l1xl0qey; path=/; HttpOnly
X-Powered-By: ASP.NET
Date: Mon, 25 Jul 2016 17:49:43 GMT