Angular2 - HTTP 200被视为错误

时间:2016-01-17 20:18:37

标签: angularjs ajax http asp.net-web-api2 response

我想让Angular2与我的Asp.Net WebApi 2服务器一起工作。我设法正确处理了一些GET请求,但是这个POST请求表现得很奇怪。我从服务器收到OK(200)响应,但以下代码将其视为错误:

public Register(){
    this.accountService.Register(this.Name, this.Password, this.RepeatPassword, this.Email, this.Skype, this.Website).subscribe(
        () => {      //this is what's supposed to be called, but isn't
            this.accountService.Login(this.Name, this.Password).subscribe(
                res => {
                    console.log(res);
                    localStorage.setItem('token', res);
                    localStorage.setItem('user', this.Name);
                    this.router.navigate(['Home']);
                },
                error2 => {
                    console.log(error2.Message);
                }
            );
        },
        error => { //the response gets here, instead of being handled above
            console.log(error.Message);
        }
    );
}

以下是accountService的Register方法:

public Register (userName:string, password:string, confirmPassword:string, email:string, skype:string, website:string)
{
    return this.http.post(this.Uri + 'api/Account/Register', JSON.stringify(
        {
            UserName: userName,
            Password: password,
            ConfirmPassword: confirmPassword,
            Email: email,
            Skype: skype,
            Website: website
        }), this.GetRequestOptions() ).map((res: Response) => res.json());
}

2 个答案:

答案 0 :(得分:6)

终于找到了答案。 Ajax,当它期待一个json时,在获取带有格式错误的json(包括空文件)的HTTP 200后触发错误回调。解决方法是用{}替换所有空响应。

要在ASP.Net WebApi2服务器中执行此操作,您需要在被调用方法的末尾使用return Ok("{}");而不是return Ok();

另一种解决方案(最有可能是更好的解决方案)是更改调用代码 - 特别是.map((res: Response) => res.json())是失败的代码位 - 如果res为空则可以进行条件检查在致电res.json()之前添加。

答案 1 :(得分:0)

我曾经在这里遇到过同样的问题。但是就我而言,我忘了告诉Angular端点正在响应哪种响应。有关更多信息,您可以read the GreyBeardedGeek response at stackoverflow