Angular httpClient - POST успешно, параметры не отправлены - PullRequest
0 голосов
/ 13 мая 2019

Я пытаюсь сделать что-то очень простое в моем приложении Ionic4 - отправить данные в интерфейс Asp.Net Web API 2.Запрос выполнен успешно, но данные не получены на сервере.

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

someAction(assetId: number) {
let asset = new FormData();
asset.append("assetId", assetId.toString());
asset.append("UserId", "1");

return this.httpClient.post(this.url + "SomeAction", asset, { headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' } }).toPromise();
    }

На сервере (C #):

[HttpPost]
[Route("Service/SomeAction")]
public HttpResponseMessage SomeAction(AccessData asset)
{
  return new HttpResponseMessage(_service.LogAsset(asset));
}

Объект asset на сервере создан, но не содержит значений, отправленных клиентом.

Кроме того, удаление / изменение отправленных заголовков приводит к полному сбою запроса.

Редактировать: Удаление заголовка приводит к ошибке 404, а также имеет это в консоли:

Доступ к XMLHttpRequest в 'http://server' от источника' http://localhost' был заблокирован политикой CORS: Ответ на предпечатный запрос не проходит проверку контроля доступа:HTTP не имеет статуса ok.

Изменение заголовка на «multipart / form-data» приводит к ошибке 415 - неподдерживаемый тип носителя

Правка # 2: Это работает с почтальоном и HTTPBot (iPhone), только не из моего приложения Ionic

Ответы [ 4 ]

0 голосов
/ 22 мая 2019

ОБНОВЛЕНИЕ: я в конечном итоге исправил проблему, включив CORS.Я включил CORS в web.config и ожидал, что этого будет достаточно, но оказалось, что мне действительно нужно было установить пакет Microsoft.AspNet.WebApi.Cors и добавить атрибут [EnableCors] в мои методы записи.

0 голосов
/ 15 мая 2019

Как говорится в сообщении об ошибке при удалении заголовка Content-Type:

Доступ к XMLHttpRequest по адресу http://server' от источника 'http://localhost' заблокирован политикой CORS

0 голосов
/ 16 мая 2019

Я перешел на использование Ionic native http plugin в качестве решения.Но это не конец моих проблем.См. вопрос для получения дополнительной информации.

0 голосов
/ 14 мая 2019

У вас какой-то запах кода

Сначала вам нужно изменить Content-Type на

'Content-Type': 'multipart / form-data'

Итак, ваш код будет выглядеть так

    headers: new HttpHeaders({
        "Content-Type": "multipart/form-data"
      })
    };

    return this.http
      .post(this.url + "SomeAction", asset , httpOptions)

и в вашем контроллере

public HttpResponseMessage SomeAction([FromForm]AccessData asset)

Дайте мне знать, если у вас все еще есть проблема

...