Jas*_*son 7 access-token jwt asp.net-web-api asp.net-core angular
下面是一个Asp.net Core WebAPI,当说用户正在尝试重复注册时,它会返回错误请求,并带有关于其参数的错误详细信息。
public async Task<IActionResult> Register([FromBody] RegisterModel registerModel)
{
if (ModelState.IsValid)
{
var user = new ApplicationUser
{
//TODO: Use Automapper instead of manual binding
UserName = registerModel.Username,
FirstName = registerModel.FirstName,
LastName = registerModel.LastName,
Email = registerModel.Email
};
var identityResult = await this.userManager.CreateAsync(user, registerModel.Password);
if (identityResult.Succeeded)
{
await signInManager.SignInAsync(user, isPersistent: false);
return Ok(GetToken(user));
}
else
{
Console.WriteLine("Errors are : "+ identityResult.Errors);
return BadRequest(identityResult.Errors);
}
}
return BadRequest(ModelState);
Run Code Online (Sandbox Code Playgroud)
响应在Angular端进行如下处理:
user.service.ts
register(user: User) {
// let headers = new Headers({ 'Content-Type': 'application/json' });
//var reqHeader = new HttpHeaders({ 'Content-Type': 'application/json'});
const reqHeader = new HttpHeaders().set('Content-Type', 'application/json')
.set('Accept', 'application/json');
//return this.http.post(this.rootUrl + '/api/account/register', body,{headers : reqHeader});
return this.http.post(this.apiUrl+ '/api/account/register', user,{headers : reqHeader});
}
Run Code Online (Sandbox Code Playgroud)
上面的方法被调用:
register.component.ts
this.userService.register(this.registerForm.value)
.pipe(map((res: Response) => res.json()))
.subscribe(
data => {
this.alertService.success('Registration successful', true);
this.router.navigate(['/login']);
},
(error:HttpErrorResponse) => {
// let validationErrorDictionary = JSON.parse(error.text());
// for (var fieldName in validationErrorDictionary) {
// if (validationErrorDictionary.hasOwnProperty(fieldName)) {
// this.errors.push(validationErrorDictionary[fieldName]);
// }
// }
// this.alertService.errorMsg(this.errors);
console.log(error.error);
});
Run Code Online (Sandbox Code Playgroud)
当我尝试做邮递员时,我得到如下完美的结果:
邮递员结果:

但是,尽管尝试了多个代码段,但仍无法得到相同的结果,并且所有结果都记录为“不良结果”作为响应。
角度结果:

我确实注意到了,尽管响应位于“网络”选项卡中。
错误说明:

这里缺少什么?您的答复将不胜感激!
小智 10
我在 angular 7 中也遇到了同样的问题。但是我今天使用下面的代码修复了这个问题:
服务中:
registerUser(userdata): Observable<any> {
return this.httpClient.post('url', userdata).pipe(catchError(this.handleError));
}
handleError(error: HttpErrorResponse) {
return throwError(error);
}
Run Code Online (Sandbox Code Playgroud)
在 register.component.ts 中:
postData() {
this.auth.registerUser(userdata).subscribe(
(resp) => {
console.log(resp);
},
(error) => {
console.log(error.error);
}
);
}
Run Code Online (Sandbox Code Playgroud)
您将从 Angular 应用程序和邮递员中的 API 获取 400 Http 状态代码:
顺便说一句:400 状态是 API 预期行为。它无法创建用户并发送错误描述以及适当的 HTTP 状态 (400)。如果您想处理此 API 错误,最好的选择类似于(引用的 Angular HttpErrorResponse类型):
this.userService.register(this.registerForm.value)
.pipe(map((res: Response) => res.json()))
.subscribe(
data => {
this.alertService.success('Registration successful', true);
this.router.navigate(['/login']);
},
(error:HttpErrorResponse) => {
let errorPayload = JSON.parse(error.message);
//ToDo: apply your handling logic e.g.:
//console.log(errorPayload[0].description
console.log(error.error);
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5480 次 |
| 最近记录: |