Ошибка: «приложение завершено без чтения всего тела запроса» Angular / C # - PullRequest
2 голосов
/ 15 марта 2019

У меня ошибка при отправке string в моем сервисе Angular.

Я попытался запустить свою хранимую процедуру при отправке строки с почтальоном, и все работает нормально.

Почтальон: enter image description here enter image description here

Однако, когда я отправляю строку через мой сервис, она не работает.

user.service.ts:

addUser(user: string): Observable<any> {
  return this.http.post<string>('/api/user/AddUser', user)
    .pipe(catchError(this.handleError));
}

Ошибка консоли:

info: Microsoft.AspNetCore.Hosting.Internal.WebHost 3 Запрос завершен в 11.3875ms 400 заявка / JSON; кодировка = UTF-8

info: Microsoft.AspNetCore.Server.Kestrel [32] Идентификатор соединения "0HLL95U87FBQE", Идентификатор запроса "0HLL95U87FBQE: 00000003": приложение завершено без чтения все тело запроса.

Ошибка браузера:

enter image description here

Так что я действительно не знаю, что на самом деле получает API, потому что ожидаемый результат должен быть строкой символов.

UserController C #:

[HttpPost]
public User AddUser([FromBody]string user)
{
  return objUser.AddUser(user);
}

Если у вас есть решение моей проблемы, мне интересно. Заранее спасибо.

EDIT: Изменяя мой сервис следующим образом:

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

addUser(user: string): Observable<any> {
    return this.http.post<User>('/api/user/AddUser', user.toString(), httpOptions)
      .pipe(catchError(this.handleError));
}

Я получаю эту новую ошибку: Зная, что A - это первая буква имени в строке.

enter image description here

Ответы [ 2 ]

3 голосов
/ 15 марта 2019

Убедитесь, что тип содержимого в заголовке http совпадает с тем, который вы указали в Postman, и фактически отправляете JSON.Также вы хотите, чтобы публикация возвращала объект пользователя, чтобы ваш userservice.ts был примерно таким:

addUser(user: string): Observable<any> {
  const httpOptions = {
    headers: new HttpHeaders({
      'Content-Type':  'application/json'
  })
  return this.http.post<user>('/api/user/AddUser', JSON.stringify(user), httpOptions)
    .pipe(catchError(this.handleError));
}
1 голос
/ 15 марта 2019

Я не вижу ни одного кода, который влияет на эту ошибку, единственное, что приходит на ум, - это строка или JSON-объект, который должен быть преобразован в строку, который отличается от Postman. ТАК, что лучше всегда структурировать тело запроса перед передачей его в API.

Попробуйте это:

addUser(user: string): Observable<any> {
  const httpOptions = {
    headers: new HttpHeaders({
      'Content-Type':  'application/json'
  })

  var userName = JSON.stringify(user);  // This

  return this.http.post<user>('/api/user/AddUser', userName, httpOptions)
    .pipe(catchError(this.handleError));
}
...