405 (метод не разрешен) с использованием Angular httpClient POST - PullRequest
0 голосов
/ 27 июня 2019

Это метод, который я использую в Angular для выполнения запроса POST:

newMessage(m: Message) {
  this.http
    .post<any>('http://localhost:55820/api/message', m)
    .subscribe(res => (console.log(res)));
}

На стороне сервера с asp.net WebApi 2 я получаю запрос следующим образом:

[Route("api/message")]
[HttpPost]
public IHttpActionResult Create(Message message)
{
    return Ok("Ok");
}

С PostMan запрос работает нормально, но используя Angular, я получаю запрос OPTIONS с кодом состояния 405 вместо запроса POST.Я что-то пропустил?Спасибо!

Ответы [ 2 ]

0 голосов
/ 28 июня 2019

Проблема была в том, что я не настраивал CORS на стороне сервера.Поскольку я использую .net WebApi 2 для бэкэнда, единственными шагами, которые я должен был выполнить для решения, были следующие:

  1. Установка CORS (с менеджером пакетов Nuget)

Установочный пакет Microsoft.AspNet.WebApi.Cors

Добавить эту строку в WebApiConfig.cs

config.EnableCors ();

Добавьте эту строку в контроллер перед объявлением класса

[EnableCors (источник: "http://localhost:4200", заголовки:" * ", методы:" * ")]

В моем случае localhost: адрес моего внешнего интерфейса 4200. Для получения дополнительной информации посетите полный учебник: https://docs.microsoft.com/es-es/aspnet/web-api/overview/security/enabling-cross-origin-requests-in-web-api

0 голосов
/ 27 июня 2019

Попробуйте с [FromBody]

 public IHttpActionResult Create([FromBody] Message message)

Как для сложных типов (например, вашего собственного объекта, например, Message), Web API пытается прочитать значение из тела HTTP-запроса.

Также убедитесь, что вы обрабатываете CORS в своем бэкэнде.

...