Невозможно вызвать POST из Angular UI Give 405 - PullRequest
0 голосов
/ 29 мая 2019

Я знаю, что уже есть около 100 вопросов, но опубликовать их, поскольку они не решают мою проблему

Итак, у меня есть многоканальная настройка сети, которая работает и работает.У нас есть API для доступа к сети. Проблема в том, что я могу вызвать POST-запрос от POSTMAN, но когда я вызываю его из Angular UI, он просто не работает.

Просто чтобы добавить, я хорошо знаю, как браузер и POSTMAN обрабатывают запрос POST, но, к сожалению, я не могу заставить это работать.

Я хорошо знаю, что когда мы вызываем 'POST'метод, браузер отправляет запрос' OPTIONS ', но я продолжаю получать 405. Я проверил код, но не смог найти ответ.Ниже мой угловой код: -

 var surl = "URL";

        let headers = new HttpHeaders({
          "Content-Type": "application/json"
       });

  headers.append("apikey","<mykey>");

       let options = {
          headers: headers
       }

        this.httpClient.post(surl,'{"method": "listpermissions", "params": []}',options).subscribe(value => {
            console.log(value);
          });

Я также пробовал заголовок, как показано ниже, но он не работает: -

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

И также так: -

let oheaders: HttpHeaders = new HttpHeaders();
oheaders = oheaders.set('Content-Type','text/plain');
oheaders = oheaders.set('apikey','<apikey>');

Любая помощь ..?

На всякий случай, если кто-то захочет просмотреть заголовки запроса и ответа.

enter image description here

Заранее спасибо, Вишеш.

Ответы [ 3 ]

4 голосов
/ 03 июня 2019

Редактировать

Я пропустил ту часть, где вы упоминаете мультицепь. Поскольку невозможно обойти CORS, добавление прокси-сервера перед многоцепью, вероятно, является единственным решением (пока не добавлена ​​поддержка CORS) https://www.multichain.com/qa/9805/how-to-enable-cors-in-multichain

Оригинальный ответ

Вы должны прочитать о CORS , но в основном ваш браузер отправляет предварительный запрос OPTIONS в ваш API, потому что ваш бэкэнд находится в другом домене / порту, чем ваше угловое приложение. Таким образом, браузер на самом деле с помощью этого запроса OPTIONS проверяет, разрешено ли выполнять POST запрос к API.

Он работает с использованием POSTMAN, поскольку CORS реализуют только браузеры, но не остальные клиенты, такие как POSTMAN.

Проблема в том, что ваш сервер не разрешает OPTIONS запросы и возвращает код состояния 405, чтобы сказать, что этот метод не разрешен. Вам нужно включить этот метод для реализации CORS.

Вы можете включить CORS непосредственно в коде приложения backend (используя nodejs, php, .net ...) или непосредственно на уровне веб-сервера (nginx / apache / IIS)

При получении запроса OPTIONS ваш бэкэнд должен вернуть код состояния http 200 (не 405), а также следующие заголовки

Access-Control-Allow-Origin: http://yoursite.com (or use * for debugging)
Access-Control-Allow-Methods: GET, POST, OPTIONS (and PUT/DELETE if needed)
Access-Control-Allow-HEADERS: apikey, content-type

Возможно, есть еще несколько заголовков, о которых я пока не могу думать, но вы получите другое сообщение об ошибке, если чего-то не хватает

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

CORS Issue

405 «(Метод не разрешен)» ответ о том, что конечная точка API Foursquare не настроена для обработки запросов OPTIONS. Таким образом, предварительная проверка завершается неудачно, и ваш браузер никогда не переходит к выполнению запроса POST, который ваш код пытается отправить.

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

Вы должны включить Cors origin, используя это расширение chrome. Здесь ссылка или разработчики бэкэнда должны добавить заголовок в свой код для методов обслуживания.

...