Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 21428|Ответ: 1

[WebAPI] Проблемы и решения для междоменных вызовов AJAX ASP.NET MVC или WebAPI сервисов

[Скопировать ссылку]
Опубликовано 01.12.2015 15:20:20 | | | |
Описание проблемы
Когда междоменный вызов ASP.NET MVC или сервис, записанный ASP.NET веб-API, он становится недоступным.
Метод размножения
  • Используйте шаблон, чтобы создать простой проект ASP.NET Web API, отладьте его, чтобы убедиться, что он работает
  • Создайте другой проект с одной HTML-страницей и сделайте вызов AJAX
  • Откройте эту страницу в браузере, и вы найдёте следующую ошибку (405: Метод не разрешён)

    Примечание: Та же ситуация происходит в ASP.NET MVC. В некоторых случаях MVC также может использоваться напрямую для разработки сервисов, что имеет свои плюсы и недостатки по сравнению с WebAPI. Ниже приведён пример сервиса, разработанного с использованием MVC


Анализ причин
Основная причина кросс-доменной проблемы заключается в том, что у браузера низкие привилегии по обоим запросам и обычно разрешается вызывать ресурсы только в локальном домене, если только целевой сервер явно не уведомляет о разрешении междоменных вызовов.
Таким образом, хотя кросс-доменная проблема вызвана поведением браузера, решение находится на стороне сервера. Потому что невозможно требовать от всех клиентов снижать уровень безопасности.

решение
Для проектов ASP.NET MVC и ASP.NET Web API я провёл исследование и пришёл к выводу, что следующий сценарий реализуем.
Для ASP.NET MVC достаточно добавить следующий контент в web.config


Для ASP.NET веб-API, помимо вышеуказанных настроек, необходимо добавить специальный дизайн, который предусматривает добавление метода OPTIONS для каждого контроллера API, но без возврата данных.
публичные строковые опционы()
{
возврат нуля; Ответ HTTP 200 с пустым телом
}

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





Предыдущий:Официальная цитата в блокноте канала Lenovo от 1 декабря
Следующий:Реализуйте простой HTTP-сервис с помощью HttpListener
 Хозяин| Опубликовано 01.12.2015 15:39:52 |
  1. <system.webServer>

  2. <httpProtocol>

  3. <customHeaders>

  4. <add name="Access-Control-Allow-Origin" value="*" />

  5. <add name="Access-Control-Allow-Headers" value="Content-Type" />

  6. <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />

  7. </customHeaders>

  8. </httpProtocol>

  9. <handlers>

  10. <remove name="ExtensionlessUrlHandler-Integrated-4.0" />

  11. <remove name="OPTIONSVerbHandler" />

  12. <remove name="TRACEVerbHandler" />

  13. <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />

  14. </handlers>

  15. </system.webServer>
Копирование кода


Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com