C# Http post Angular2

C# Http post Angular2,c#,angularjs,wcf,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" }) let data = JSON.stringify({ dato: 1

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

$http({
 method: 'POST',
 url: url,
 data: JSON.stringify({ dato: 11 }),
 dataType: "json",
 contentType: "application/x-www-form-urlencoded"
})
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");
});
在Angular2中,如下所示:

$http({
 method: 'POST',
 url: url,
 data: JSON.stringify({ dato: 11 }),
 dataType: "json",
 contentType: "application/x-www-form-urlencoded"
})
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#服务收到一个错误,并说我发送给函数的格式是“原始”的,而等待它发送带有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({ dato: 11 });
这是:

let headers = new Headers({ 'Content-Type': 'application/x-www-form-urlencoded'});
它们之间存在着极大的矛盾和矛盾

在对web服务器发出HTTP请求时,请尝试保持一致,以确定如何对请求进行编码。因此,如果要发送JSON正文,请确保指定正确的
内容类型
请求头,以便服务器知道如何处理此有效负载:

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

除了Darin所说的之外,我想说你没有正确使用
BodyStyle=WebMessageBodyStyle.Wrapped

请参阅,您的wcf方法需要一个参数,这样您就可以在不使用wrappedrequest属性的情况下继续

[OperationContract]
[WebInvoke(UriTemplate = "/GetCaptaciones", Method = "POST", ResponseFormat = WebMessageFormat.Json, RequestFormat=WebMessageFormat.Json)]
List<Captacion> GetCaptaciones(int id_captador);
现在wcf方法变得像

List<Captacion> GetCaptaciones(CaptacionesInputType CaptacionesInput);
列出GetCaptaciones(CaptacionesInputType CaptacionesInput);

谢谢您的回答。当我更改该内容类型时,会出现错误“405 Method Not Allowed”,那么您需要修复您的Web服务器,以便它接受POST请求。405状态代码通常表示Web服务器不理解您正在使用的HTTP谓词。我将添加我的服务,以便您可以看到它。更新mi问题