У меня есть простой метод action, который возвращает JSON. Он работает на ajax.example.com. Мне нужно получить доступ к этому с другого сайта someothersite.com.
Если я попытаюсь назвать это, я получу ожидаемое ...:
Origin http://someothersite.com is not allowed by Access-Control-Allow-Origin.
Я знаю два способа обойти это: JSONP и создание собственного HttpHandler для установки заголовка.
Нет ли более простого способа?
Разве невозможно для простого действия определить список разрешенных источников или просто разрешить всем? Может быть, фильтр действий?
Оптимальным было бы ...
return json(mydata, JsonBehaviour.IDontCareWhoAccessesMe);
json
asp.net-mvc-3
cors
asp.net-ajax
Kjensen
источник
источник
Ответы:
Для простых контроллеров ASP.NET MVC
Создать новый атрибут
Отметьте свое действие:
Для ASP.NET Web API
Пометить весь контроллер API:
Или отдельные вызовы API:
Для Internet Explorer <= v9
IE <= 9 не поддерживает CORS. Я написал javascript, который будет автоматически направлять эти запросы через прокси. Это все на 100% прозрачно (вам просто нужно включить мой прокси и скрипт).
Загрузите его, используя nuget,
corsproxy
и следуйте прилагаемым инструкциям.Сообщение в блоге | Исходный код
источник
Если вы используете IIS 7+, вы можете поместить файл web.config в корень папки с этим в разделе system.webServer:
См .: http://msdn.microsoft.com/en-us/library/ms178685.aspx И: http://enable-cors.org/#how-iis7
источник
Я столкнулся с проблемой, когда браузер отказывался обслуживать контент, который он извлек, когда запрос передавался в файлах cookie (например, xhr имел его
withCredentials=true
), и сайтAccess-Control-Allow-Origin
настроен на*
. (Ошибка в Chrome: «Невозможно использовать подстановочный знак в Access-Control-Allow-Origin, когда флаг учетных данных имеет значение true».)Основываясь на ответе @jgauffin, я создал его, который, по сути, является способом обхода конкретной проверки безопасности браузера, поэтому будьте осторожны с emptor.
источник
Это действительно просто, просто добавьте это в web.config
В Origin поместите все домены, которые имеют доступ к вашему веб-серверу, в заголовки поместите все возможные заголовки, которые может использовать любой HTTP-запрос ajax, в методы поместите все методы, которые вы разрешаете на своем сервере.
С уважением :)
источник
Иногда глагол OPTIONS также вызывает проблемы
Просто: обновите ваш web.config следующим
И обновите заголовки веб-службы / контроллера с помощью httpGet и httpOptions
источник
В WebAPI 2 теперь есть пакет для CORS, который можно установить с помощью: Install-Package Microsoft.AspNet.WebApi.Cors -pre -project WebServic
После того, как это установлено, следуйте за этим для кода: http://www.asp.net/web-api/overview/security/enabling-cross-origin-requests-in-web-api
источник
Добавьте эту строку в ваш метод, если вы используете API.
источник
Этот урок очень полезен. Чтобы дать краткое резюме:
Используйте пакет CORS, доступный на Nuget:
Install-Package Microsoft.AspNet.WebApi.Cors
В вашем
WebApiConfig.cs
файле добавьтеconfig.EnableCors()
вRegister()
метод.Добавьте атрибут к контроллерам, которые вам нужны для обработки cors:
[EnableCors(origins: "<origin address in here>", headers: "*", methods: "*")]
источник
источник
Другой способ - мы можем добавить код, как показано ниже в файле webApiconfig.cs.
config.EnableCors (new EnableCorsAttribute (" ", headers: " ", методы: "*" ,posedHeaders: "TestHeaderToExpose") {SupportsCredentials = true});
Или мы можем добавить приведенный ниже код в файл Global.Asax.
Я написал это для вариантов. Пожалуйста, измените так же, как вам нужно.
Удачного кодирования!
источник
После целого вечера борьбы я наконец получил это на работу. После некоторой отладки я обнаружил, что проблема, с которой я сталкивался, заключалась в том, что мой клиент отправлял так называемый запрос параметров предварительной проверки, чтобы проверить, разрешено ли приложению отправлять запрос по почте с указанием источника, методов и заголовков. Я не хотел использовать Owin или APIController, поэтому я начал копать и нашел следующее решение с помощью только ActionFilterAttribute. Особенно важна часть «Access-Control-Allow-Headers», поскольку упомянутые там заголовки должны совпадать с заголовками, которые отправит ваш запрос.
Наконец, мой метод действия MVC выглядит следующим образом. Здесь важно также упомянуть параметры HttpVerbs, потому что в противном случае предварительный запрос не будет выполнен.
источник
В Web.config введите следующее
источник
Если вы используете IIS, я бы предложил попробовать модуль IIS CORS .
Он прост в настройке и работает для всех типов контроллеров.
Вот пример конфигурации:
источник
Я использую DotNet Core MVC и после нескольких часов борьбы с пакетами nuget, Startup.cs, атрибутами и этим местом я просто добавил это к действию MVC:
Я понимаю, что это довольно неуклюже, но это все, что мне было нужно, и больше ничего не хотелось добавлять эти заголовки. Я надеюсь, что это помогает кому-то еще!
источник