我在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 () { 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
变量未定义之前,而是一个正确的对象。我的代码适用于Chrome 48和Firefox 44。
更新
奇怪的是,当我查看IE开发人员工具的网络选项卡时,它显示了正确的请求体(即JSON)。此外,当我将请求主体复制粘贴到SoapUI时,它正确执行。 IE请求的HTTP方法是OK(POST),也是内容类型(application / json)。第一个IE请求有结果307,后来又有400个。
UPDATE2
我看不出Chrome和IE之间的请求有任何重大差异,除了一个 - 在IE的JSON键顺序略有不同,但结构是正确的。
UPDATE3
与$ http服务完全相同的问题。在Chrome中它可以工作,WCF绑定一个对象,在IE中它没有并且在服务方法中获得null参数。
var req = {
method: 'POST',
url: 'some/Address/',
data: { bar: someData}
}
$http(req).then(function(){console.log('saved')}, function(){});
答案 0 :(得分:0)
这个问题的原因令人难以置信。不知何故,Internet Explorer和WCF一起无法在服务方法地址的末尾处理斜杠。删除反斜杠消除了这个问题:
UriTemplate = "some/Address/" => UriTemplate = "some/Address"
var FooServiceHandle = $resource('some/Address/'); => var FooServiceHandle = $resource('some/Address');
在Chrome和Firefox中,反斜杠都不是问题,可能会修剪它。