Angularjs $resource在Internet Explorer中发布空对象
我对Angular 1.4.9中的Internet Explorer 11和Angularjs $resource在Internet Explorer中发布空对象,angularjs,wcf,internet-explorer,Angularjs,Wcf,Internet Explorer,我对Angular 1.4.9中的Internet Explorer 11和$resource服务有问题。我的代码调用web服务发布某些对象: var FooServiceHandle = $resource('some/Address/'); var fooServiceHandle = new FooServiceHandle (); fooServiceHandle.bar = someData; fooServiceHandle.$save().then(function () {
$resource
服务有问题。我的代码调用web服务发布某些对象:
var FooServiceHandle = $resource('some/Address/');
var fooServiceHandle = new FooServiceHandle ();
fooServiceHandle.bar = someData;
fooServiceHandle.$save().then(function () { console.log('saved') });
另一方面,Web服务是WCF REST
[OperationContract]
[FaultContract(typeof(RegistrationNotAllowedFault))]
[WebInvoke(UriTemplate = "some/Address/", ResponseFormat = WebMessageFormat.Json, RequestFormat = WebMessageFormat.Json, Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped)]
string Foo(Bar bar);
当我使用IE时,web服务中Foo方法的参数为null(但是调用了服务方法)。就在$save
调用fooServiceHandle.bar
变量之前,它不是未定义的,而是一个正确的对象。我的代码在Chrome48和Firefox44中工作
更新
奇怪的是,当我查看IE开发者工具的网络选项卡时,它显示了正确的请求体(JSON)。此外,当我将该请求体复制粘贴到SoapUI时,它会正确执行。IE请求的HTTP方法是ok(POST),也是内容类型(application/json)。第一个IE请求的结果是307,然后是另一个结果是400
更新2
我看不出Chrome和IE在请求方面有什么主要区别,除了一点——在IE中,JSON键的顺序略有不同,但结构还可以
更新3
与$http服务完全相同的问题。在Chrome中它工作,WCF绑定一个对象,而在IE中它不工作,并且在服务方法中获取null参数
var req = {
method: 'POST',
url: 'some/Address/',
data: { bar: someData}
}
$http(req).then(function(){console.log('saved')}, function(){});
这个问题的原因是非常令人难以置信的。不知何故,Internet Explorer和WCF不能一起处理服务结束方法地址处的斜杠。删除反斜杠可消除此问题:
UriTemplate = "some/Address/" => UriTemplate = "some/Address"
var FooServiceHandle = $resource('some/Address/'); => var FooServiceHandle = $resource('some/Address');
在Chrome和Firefox中,反斜杠都不是问题,可能他们会修剪它