Http发布Angular2

时间:2017-04-26 19:01:15

标签: c# angularjs wcf

我正在将Ionic v1应用程序迁移到Ionic v2。在我的一个方法中,我调用了一个WCF服务。在AngularJS中,我这样做:

$http({
 method: 'POST',
 url: url,
 data: JSON.stringify({ dato: 11 }),
 dataType: "json",
 contentType: "application/x-www-form-urlencoded"
})

在Angular2中就像这样:

let data = JSON.stringify({ dato: 11 });
let headers = new Headers({ 'Content-Type': 'application/x-www-form-urlencoded'});
let options = new RequestOptions({ headers: headers });
this.http.post(url, data, options)
.subscribe(data => {
  console.log(data);
}, error => {
  console.log("Error");
});

但是,我收到来自我的C#服务的错误,并说我发送给我的函数的格式是'RAW',等待它发送带有Angular 2的JSON

我在AngularJS中发生了这个错误,但它是通过添加我之前在这篇文章中留下的代码来解决的。

修改

我的WCF服务:

[OperationContract]
[WebInvoke(UriTemplate = "/GetCaptaciones", Method = "POST", ResponseFormat = WebMessageFormat.Json, RequestFormat=WebMessageFormat.Json , BodyStyle = WebMessageBodyStyle.Wrapped)]
List<Captacion> GetCaptaciones(int id_captador);

let data = JSON.stringify({ id_captador: 11 });
let headers = new Headers({ 'Content-Type': 'application/json' });
let options = new RequestOptions({ headers: headers });
this.http.post(url + "/GetCaptaciones", data, options).subscribe(data => {
  console.log(data);
});

不工作,

但如果我从POSTMAN测试,那么

1 个答案:

答案 0 :(得分:1)

此:

let data = JSON.stringify({ dato: 11 });

和此:

let headers = new Headers({ 'Content-Type': 'application/x-www-form-urlencoded'});

非常矛盾且不一致。

当您针对Web服务器发出有关如何对请求进行编码的HTTP请求时,请尝试保持一致。因此,如果打算发送JSON主体,请确保指定正确的Content-Type请求标头,以便服务器知道如何处理此有效负载:

let headers = new Headers({ 'Content-Type': 'application/json'});