#angular #angular-http #wcf-rest #angular-observable
#angular #angular-http #wcf-rest #angular-наблюдаемый
Вопрос:
Я пишу демонстрационное приложение, которое будет вызывать службу WCF rest из моего приложения Angular 4, используя HTTP service post. Я могу успешно отправить свои данные в свой метод обслуживания (operationcontract). Но он вызывает мой сервис два раза, и во второй раз он попадает в метод service. В первый раз он просто попадает в Global.asax
файл. Так ли работает http-публикация angular?
Далее следует вызов службы:
Ниже приведен операционный контракт или метод службы rest:
Ниже приведена реализация сервиса:
Ниже приведен Global.asax
код:
Этот глобальный код.asax попадает дважды, я не понимаю, почему?
Ниже приведена подробная информация о сетевой вкладке панели инструментов Chrome dev, она дважды вызывает WCF rest.
Вторичным является сетевой запрос chrome и ответ: первый вызов, который является вызовом ‘option’:
Второй вызов, который является post-вызовом:
Комментарии:
1. Вместо того, чтобы делиться скриншотами / изображениями, пожалуйста, поделитесь своим кодом здесь. Например, в моей стране imgur.com запрещено (не спрашивайте почему :)) и я не могу видеть, что на изображениях. И, конечно, люди не могут искать текст в изображениях, верно?
2. похоже, вы используете CORS. Итак, можете ли вы подтвердить (просмотрев вкладку chrome dev tools network или иным образом), что первый вызов не является вызовом OPTIONS? developer.mozilla.org/en-US/docs/Web/HTTP/Methods/OPTIONS
Ответ №1:
Как уже сказал Итан: вы используете CORS. Таким образом, веб-браузер сначала вызывает конечную точку с запросом параметров.
НО это не приведет к повторному вызову Rest-API (вы можете проверить это с помощью ведения журнала сервера или просто точек останова в вашем сервере). Я думаю, что ваш интерфейс запущен в режиме разработки (вы можете проверить это в своем браузере-log -> angular создает запись в журнале, если он запущен в режиме разработки).
В режиме разработки angular дважды проверяет каждое взаимодействие с пользователем и (имхо) каждый http-вызов в режиме разработки, чтобы предотвратить ошибки синхронизации — и «значение, измененное после проверки».
Комментарии:
1. Привет, Тобиас, Итан, пожалуйста, посмотрите последний отредактированный параметр в запросе. Вы можете видеть события панели инструментов Chrome dev
2. да, он вызывает дважды. до сих пор нет подсказки, какой это http-метод. Может быть OPTIONS-method для cors и POST для «реального» вызова
3. кстати: вам не нужно,
JSON.stringify(servers)
поддерживает ли ваш серверный сервер json-post-body4. вызывается ли rest дважды? Это будет проблемой с производительностью. Архитектор моей команды не позволит мне этого сделать. Так ли это для всех rest API? Spring rest, Java Rest — во всех этих случаях он будет вызываться дважды? Так ли это работает или виноват мой код?
5. Как сказал @Tobias, два запроса не означают два вызова API. Если вы откроете сведения о первом запросе, вы, вероятно, увидите, что для метода HTTP установлено значение OPTIONS. Это означает, что Angular запускает CORS.