我正在asp.net核心角度应用程序中实现身份验证。在我的登录组件中,我正在auth服务中发送凭据,该凭据返回true或false。当返回true时,它工作正常。但是,当它返回false时,不会将'invalidLogin'属性的值更改为true。我已经尝试过将其放置在订阅块之外,然后才起作用。我不知道为什么它在订阅块内没有改变。 `
export class LoginComponent implements OnInit {
invalidLogin:boolean | undefined;
loginCredentials:loginModel={
email:"",
password:""
};
constructor(private router:Router, private authService:AuthService) { }
ngOnInit() {
this.invalidLogin=false;
}
signIn() {
this.authService.login(this.loginCredentials).subscribe(result=>{
if(result) this.router.navigate(['/']);
this.invalidLogin=true;
});
}
}
`
答案 0 :(得分:2)
subscribe
的第一个参数称为 next 回调,仅在HTTP请求成功时才调用。由于服务器返回的是400(错误请求),因此将其视为错误,因此不会调用您的代码。
subscribe
的 second 参数称为 error 回调:如果有错误,则调用此方法。这意味着您可以提供第二个参数,以便在出现错误时得到通知,例如:
this.authService.login(this.loginCredentials).subscribe(
result => {
if (result) this.router.navigate(['/']);
this.invalidLogin = true; // Might not be necessary anymore.
},
err => {
this.invalidLogin = true;
}
});
Observables的角度guide解释得比我更好:
相反,您可以通过在观察者上指定错误回调来处理错误。产生错误还会导致可观察对象清除订阅并停止产生值。可观察对象可以产生值(调用下一个回调),也可以完成,调用完成或错误回调。
答案 1 :(得分:1)
检查响应中的状态码,如果它不是200(成功的状态码范围),则将通过如下所示的错误回调进行处理:
.subscribe((data) => {
// Success case
console.log(data);
},
(e) => {
// Error case
console.log(e);
});