«Сбой Http во время синтаксического анализа» в Angular

#.net #angular #rest #asp.net-core #.net-core

#.net #angular #отдых #asp.net-core #.net-core

Вопрос:

Я пытаюсь подключить свой интерфейс в Angular к Api, разработанному с использованием .NETCore, но я получаю следующую ошибку

 Http failure during parsing for http://localhost:5000/User/register
  

Несмотря на ошибку, пользователи все еще сохраняются в базе данных.
Ниже приведены моя служба rest, мои компоненты ts и метод register в серверной части

Служба Rest

 const endpoint = 'http://localhost:5000/';
const httpOptions = {
  headers: new HttpHeaders({
    'Content-Type': 'application/json',
  }),
};

@Injectable({
  providedIn: 'root'
})
export class RestService {

  constructor(private http: HttpClient) { }

  private extractData(res: Response) {
    let body = res;
    return body || {};
  }

  addUser(user: User): Observable<User> {
    return this.http.post<User>(
      endpoint   'User/register',
      JSON.stringify(user),
      httpOptions
    );
  }
}
  

Зарегистрировать Component .ts

 @Component({
  selector: 'app-register',
  templateUrl: './register.component.html',
  styleUrls: ['./register.component.css']
})
export class RegisterComponent implements OnInit {
  @Input() userData: User = new User();

  constructor(  public rest: RestService,
    private route: ActivatedRoute,
    private router: Router) { }

  ngOnInit(): void {
  }

  addUser() {
    this.rest.addUser(this.userData).subscribe(
      (result:any) => {
        console.log(result);
        this.router.navigate(['/login']);
      },
      (err) => {
        console.log(err);
        console.log("DADOS" JSON.stringify(this.userData));
      }
    );
  }
}
  

Метод в серверной части

  [AllowAnonymous]
        [HttpPost("register")]
        public IActionResult Register([FromBody]RegisterModel model)
        {
            var user = _mapper.Map<User>(model);

            try
            {
                // create user
                _userService.Create(user, model.Password);
                return Ok("Successful registration");
            }
            catch (AppException ex)
            {
                // return error message if there was an exception
                return BadRequest(new { message = ex.Message });
            }
        }
  

Ответ №1:

Вы должны возвращать только текст или только json в серверной части. В то время как возвращает текст при Ok («Успешная регистрация»), он возвращает модель JSON при BadRequest(new { message = ex.Message }).

Это должно выглядеть так:

     [AllowAnonymous]
    [HttpPost("register")]
    public IActionResult Register([FromBody]RegisterModel model)
    {
        var user = _mapper.Map<User>(model);

        try
        {
            // create user
            _userService.Create(user, model.Password);
            return Ok("Successful registration");
        }
        catch (AppException ex)
        {
            // return error message if there was an exception
            return BadRequest(ex.Message);
        }
    }
  

И затем вы должны отправить параметр responseType в ваших httpOptions.

   const httpOptions = {
    headers: new HttpHeaders({
      'Content-Type': 'application/json',
      'responseType': 'text'
    }),
  };