我正在尝试让Angular2与我的Asp.NETWebAPI 2服务器一起工作。我成功地处理了一些GET请求,但是这个POST请求的行为异常。我从服务器收到OK(200)响应,但以下代码将其视为错误:
公共寄存器(){
this.accountService.Register(this.Name、this.Password、this.RepeatPassword、this.Email、this.Skype、this.Website)。订阅(
()=>;{//这是应该被称为的,但不是
this.accountService.Login(this.Name,this.Password)。订阅(
res=>{
控制台日志(res);
setItem('token',res);
localStorage.setItem('user',this.Name);
this.router.navigate(['Home']);
},
错误2=>{
console.log(error2.Message);
}
);
},
error=>;{//响应在此处,而不是在上面处理
console.log(错误消息);
}
);
}
以下是accountService的注册方法:
公共注册(用户名:string、密码:string、确认密码:string、电子邮件:string、skype:string、网站:string)
{
返回this.http.post(this.Uri+'api/Account/Register',JSON.stringify(
{
用户名:用户名,
密码:密码,
ConfirmPassword:ConfirmPassword,
电邮:电邮,,
Skype:Skype,
网站:网址
}),this.GetRequestOptions()).map((res:Response)=>;res.json());
}
终于找到了答案。
Ajax在需要json时,会在获取带有格式错误json(包括空文件)的HTTP 200后触发错误回调。修复方法是将所有空响应替换为{}
要在ASP.NETWebAPI2服务器中执行此操作,需要使用返回Ok(“{}”)而不仅仅是返回Ok()位于正在调用的方法的末尾
另一种解决方案(很可能是更好的解决方案)是更改调用代码-特别是,.map((res:Response)=>;res.json())是失败的代码位-可以在调用res.json()之前添加一个条件检查,检查res是否为空