Бэкэнд не распознает json тело Angular - PullRequest
0 голосов
/ 01 марта 2020

My Angular (внешний интерфейс) выполняет запрос POST с телом JSON и отправляет его на сервер следующим образом:

const reponse = {
      "Id_Harry" : this.harry.getId,
      "x_harry" : this.harry.getX(),
      "y_harry" : this.harry.getY(),
      "Pv_Harry" : this.harry.getPv(),
     "Force_Harry" : this.harry.getForce()
  };

fetch(url, {
method: 'POST',
body: JSON.stringify(reponse),
headers :{
    "Content-Type" : "application/json ,charset=UTF-8"
  }
}).then((resp) => resp.json()).then(function(response) {
    console.info('fetch()', response);
    return response;
});

Кажется, что сервер не распознает тело сервера json. Внутренний код - это сообщение, которое обновляет всю базу данных значениями, заданными телом json. Код бэкэнда:

   [Route("api/Harry/update")]
        [HttpPost]
        public IHttpActionResult PostHarry([FromBody] HarryViewModel harry)
        {
            try
            {
                if (harry == null)
                {
                    return NotFound();
                }

                HarryDTO ha = new HarryDTO();

                ha.Id_Harry = harry.Id_Harry;
                ha.Pv_Harry = harry.Pv_Harry;
                ha.Force_Harry = harry.Force_Harry;
                ha.x_harry = harry.x_harry;
                ha.y_harry = harry.y_harry;


                _harryService.UpdateHarry(ha);

                return Content(HttpStatusCode.OK,"OK");

            }
            catch (Exception ex)
            {
                return Content(HttpStatusCode.InternalServerError, "Something happenes!");

            }
        }

Класс HarryViewModel:

 public class HarryViewModel
    {
        public int Id_Harry { get; set; }
        public int Pv_Harry { get; set; }
        public int Force_Harry { get; set; }
        public int x_harry { get; set; }
        public int y_harry { get; set; }
    }

Бэкэнд не распознает формат Angular json. Я получаю эту ошибку: 415 Неподдерживаемый тип носителя. «Медиатипеформатор недоступен для чтения объекта типа 'harryviewmodel' из содержимого с типом носителя 'application / octet-stream'."

Посмотрите на ошибку ОШИБКА:

error picture

Большое спасибо за ваше внимание.

Ответы [ 2 ]

0 голосов
/ 01 марта 2020

Я проверил ваш код:

Вот что вам нужно сделать:

import { HttpHeaders } from '@angular/common/http';

const response = {
    "Id_Harry" : this.harry.getId,
    "x_harry" : this.harry.getX(),
    "y_harry" : this.harry.getY(),
    "Pv_Harry" : this.harry.getPv(),
    "Force_Harry" : this.harry.getForce()
};
const headers = new HttpHeaders();
headers.append('Content-Type', 'application/json');
headers.append('Accept', 'application/json');
this.http.post(url, response, { headers: headers }).toPromise().then((data:any) => {
  console.log(data);
  console.log(data.json.test);
  this.json = JSON.stringify(data.json);
}); 
0 голосов
/ 01 марта 2020

Вы не передаете ответ на API.

const reponse = {
      "Id_Harry" : this.harry.getId,
      "x_harry" : this.harry.getX(),
      "y_harry" : this.harry.getY(),
      "Pv_Harry" : this.harry.getPv(),
     "Force_Harry" : this.harry.getForce()
  };
// Instead of this.checkResponse,  pass "response" which is your post data.**
  this.http.post(url, response).toPromise().then((data:any) => {
    console.log(data);
    console.log(data.json.test);
    this.json = JSON.stringify(data.json);
  }); 

И если API не распознает тип данных поста, тогда передайте правильный заголовок типа контента на ваш запрос поста так: -

const reponse = {
      "Id_Harry" : this.harry.getId,
      "x_harry" : this.harry.getX(),
      "y_harry" : this.harry.getY(),
      "Pv_Harry" : this.harry.getPv(),
     "Force_Harry" : this.harry.getForce()
  };

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

  this.http.post(url, response, httpOptions).toPromise().then((data:any) => {
    console.log(data);
    console.log(data.json.test);
    this.json = JSON.stringify(data.json);
  }); 

Подробнее о настройках HttpClient можно узнать здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...