|
Описание проблемы Когда междоменный вызов 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 с пустым телом }
Примечание: эту функцию можно выполнить с помощью небольшого исследования, и, возможно, лучше спроектировать её как фильтр.
|