2017-01-31 14 views
1

Я создал WebService в C#. Все методы GET работают без проблем.RESTful WebService CORS Preflight Channel не удалось

Теперь мне нужно предоставить некоторые методы POST. При вызове через C# он работает без проблем. Затем я попытался написать небольшую html-страницу с JavaScript, чтобы вызвать мои методы. Но там я получаю ошибку CORS («Канал Preflight не удалось»).

Я уже добавили следующую часть в мой файл web.config:

<customHeaders> 
    <add name="Access-Control-Allow-Origin" value="*" /> 
    <add name="Access-Control-Allow-Headers" value="*" /> 
    <add name="Access-Control-Allow-Methods" value="*" /> 
</customHeaders> 

К сожалению, он до сих пор не работает. Что я делаю не так?

+0

Могу ли я спросить, какие рамки вы используете для API? – CodingGorilla

+0

Вы обрабатываете метод HEAD? Обычно браузеры делают запрос перед полетом с помощью метода HEAD для проверки политики CORS только один раз. – Gusman

+0

@Gusman на самом деле это обычно с запросом 'OPTIONS'. Смотрите: https://en.wikipedia.org/wiki/Cross-origin_resource_sharing#How_CORS_works – CodingGorilla

ответ

4

Так что у вас здесь нет действительного способа обработки запросов CORS. Проблема в том, что это добавит заголовки CORS в все ответы, но браузеры будут использовать запрос OPTIONS, чтобы проверить заголовки CORS. Это будет работать, если вы также реализуете запросы OPTIONS для всех ваших конечных точек API.

Лучшим вариантом является использование одной из структур CORS, например, такой: Enabling Cross-Origin Requests in ASP.NET Web API 2 для ASP.NET WebAPI 2. Этот тип фреймворка перехватит запрос OPTIONS и предоставит соответствующий ответ без необходимости в вас вручную создать 2 маршрута на конечную точку.

+0

Привет @CodingGorilla, Я просто переписал свой проект ASP.NET Web API 2 и теперь он работает без проблем. Спасибо. –