Включить CORS в веб-службе ASP.NET [VS 2008] [дублировать]

11
задан O. Jones 25 February 2016 в 13:41
поделиться

6 ответов

Я рекомендую дважды проверять, что вы выполнили все шаги на этой странице: CORS на ASP.NET

В дополнение к:

Response.AppendHeader("Access-Control-Allow-Origin", "*");

Также попробуйте:

Response.AppendHeader("Access-Control-Allow-Methods","*");

Попробуйте добавить прямо в веб-конфигурацию:

<system.webServer>
   <httpProtocol>
     <customHeaders>
       <add name="Access-Control-Allow-Methods" value="*" />
       <add name="Access-Control-Allow-Headers" value="Content-Type" />
     </customHeaders>
   </httpProtocol>
</system.webServer>

В противном случае вам необходимо обеспечить контроль над обоими доменами.

7
ответ дан AhHatem 25 August 2018 в 00:57
поделиться

Вы можете сделать это в MVC

[EnableCors(origins: "*", headers: "*", methods: "*")]
public ActionResult test()
{
     Response.AppendHeader("Access-Control-Allow-Origin", "*");
     return View();
}
0
ответ дан Ankur Shah 25 August 2018 в 00:57
поделиться

Если вам нужен запрос перед полетом, например. поэтому вы можете отправлять аутентифицированные запросы, вы не можете установить Access-Control-Allow-Origin: *. Это должен быть конкретный домен Origin. Также вы должны установить заголовки ответов Access-Control-Allow-Methods и Access-Control-Allow-Headers, если вы используете что-либо помимо значений по умолчанию. (Обратите внимание, что эти ограничения - это то, как работает CORS - вот как это определено.)

Таким образом, недостаточно просто набросить атрибут [EnableCors], вы должны установить значения для параметров:

[EnableCors(origins: "https://www.olliejones.com", headers: "X-Custom-Header", methods: "PUT", SupportsCredentials = true)]

Или если вы хотите делать что-то вручную и явно:

HttpContext.Current.Response.AppendHeader("Access-Control-Allow-Origin", "https://www.olliejones.com");
HttpContext.Current.Response.AppendHeader("Access-Control-Allow-Headers", "X-Custom-Header");
HttpContext.Current.Response.AppendHeader("Access-Control-Allow-Methods", "PUT");
HttpContext.Current.Response.AppendHeader("Access-Control-Allow-Credentials", "true");

Последнее, что вам нужно вызвать .EnableCors() при запуске. В частности. MVC или WebAPI, вы бы назвали это на HttpConfiguration, при регистрации конфигурации и тому подобное, однако я понятия не имею, как это работает с WebForms.

2
ответ дан AviD 25 August 2018 в 00:57
поделиться

Для веб-формы вы можете использовать

Response.AddHeader («Access-Control-Allow-Origin», «*»);

вместо

Response.AppendHeader («Access-Control-Allow-Origin», «*»);

Первый работает для старой версии веб-формы ASP.Net.

0
ответ дан Joe Park 25 August 2018 в 00:57
поделиться

Я думаю, что ваш код выглядит хорошо, но IIS не отправляет объект заголовка в одиночку с ожидаемым ответом. Убедитесь, что IIS настроен правильно.

  • Конфигурирование IIS6
  • Настройка IIS7

Если CORS не работает для вашей конкретной проблемы, возможно, jsonp - еще один возможный способ.

-1
ответ дан marr75 25 August 2018 в 00:57
поделиться

Если вы используете метод AppendHeader для отправки заголовков, специфичных для кеша, и в то же время используйте модель объекта кэша (Cache) для установки политики кэширования, заголовки HTTP-ответов, относящиеся к кешированию, могут быть удалены при использовании модели объекта кэша , Такое поведение позволяет ASP.NET поддерживать самые ограничительные настройки. Например, рассмотрите страницу, содержащую пользовательские элементы управления. Если эти элементы управления имеют конфликтующие политики кэширования, будет использоваться наиболее ограничительная политика кэширования. Если один пользовательский элемент управления устанавливает заголовок «Cache-Control: Public», а другой пользовательский элемент управления устанавливает более ограничительный заголовок «Cache-Control: Private» через вызовы SetCacheability, тогда заголовок «Cache-Control: Private» будет отправлен с response.

Вы можете создать httpProtocol в веб-конфигурации для customHeaders.

<httpProtocol>
     <customHeaders>
       <add name="Access-Control-Allow-Methods" values="*" />        
     </customHeaders>
   <httpProtocol>
0
ответ дан Nirav Patel 25 August 2018 в 00:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: