Http Post отправляет запрос с нулевым телом - PullRequest
0 голосов
/ 10 октября 2018

У меня есть .NET API, который выглядит следующим образом

public List<long> Compare ([fromBody] String NumberOfDatasets)

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

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

  • CORS
  • HttpPost
  • HttpOptions

для API.Кроме того, заголовки добавляются правильно, что я проверил через Chrome Dev Tool.Я что-то здесь упускаю?

Файл TS моего углового компонента приложения выглядит следующим образом:

myFunction()
{
   let httpHeaders = new HttpHeaders({
     'Content-Type' : 'application/json'
   });
   let options = {
     headers: httpHeaders
   };
   return this.httpClient.post(myUrl, "5", options);
}

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Публикация строки в качестве тела при использовании типа содержимого application/json недопустима, поскольку json попытается выполнить синтаксический анализ объекта {} или массива [].Чтобы отправить одну строку в качестве тела запроса, измените тип содержимого на application/x-www-form-urlencoded и добавьте знак равенства (=) перед строкой

Попробуйте это так

myFunction()
{
   let httpHeaders = new HttpHeaders({
     'Content-Type' : 'application/x-www-form-urlencoded'
   });
   let options = {
     headers: httpHeaders
   };
   return this.httpClient.post(myUrl, "=5", options);
}
0 голосов
/ 10 октября 2018

"5" не является допустимым JSON, поэтому MVC не может десериализовать его и возвращает ноль.

Правильный способ передачи строки, поскольку JSON заключает ее в кавычки:

"\"5\"" //that's the way you should write it in JS

или используйте

JSON.stringify("5")

, который даст вам правильную строку JSON любого объекта, который вы хотите.

Кроме того, передача { NumberOfDatasets: "5" } не работает, потому что правильный десериализованный объект дляэто должно выглядеть так:

public class DatasetsNumber
{
    public string NumberOfDatasets { get; set; }
}

, что само по себе не является строкой.

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