2013-11-07 2 views
0

Я пишу свой первый сервис WebAPI, который вызывается из чистого приложения HTML/javascript. Сначала я запускаю визуальную студию, а затем запускаю свое приложение в Safari (он отказывается запускаться в Chrome и дает эту точную ошибку независимо от того, что я делаю, но до сих пор в Safari было хорошо).Контроль доступа Разрешить ошибку Origin

Основываясь на моем другом чтении SO, я добавил заголовок, который является Access-Control-Allow-Origin со значением *.

Когда я нажимаю кнопку в своем веб-приложении, она вызывает вызов AJAX, и я могу пройти через отладчик, чтобы увидеть, что он вызывает мой сервис. Когда он возвращается, он всегда возвращает объект, а ошибка в Safari в консоли «XMLHttpRequest не может загрузить (myurl). Файл происхождения: // не разрешен Access-Control-Allow-Origin».

Любые предложения о том, как получить Safari для принятия возвращаемого значения, будут очень признательны. Как я уже сказал, он возвращает класс, который я ожидал, что WebAPI включится в строку JSON, чтобы вернуться в браузер. Я не знаю, делаю ли я что-то неправильно здесь, или что-то не так в Safari. Я должен упомянуть, хотя я думаю, что это очевидно, я использую MVC4, ergo Я использую Safari для Windows, а не Mac.

Thanks

+0

вы также можете перейти к [Междоменные Ajax с Cross-Origin Resource Sharing] (http://www.nczonline.net/blog/2010/05/25/cross- domain-ajax-with-cross-origin-sharing-sharing /) для более – Mozak

ответ

0

Как вы добавляете заголовок? Проблема заключается не в получении сафари, чтобы принять возвращаемое значение, ваш WebAPI отклоняет запрос.

Вот статья о том, как реализовать CORS в Web API v1 (MVC4). http://goo.gl/BZkrlf

Если вы можете использовать MVC5/WebAPI v2, есть более простой способ, чтобы включить CORS через пакет NuGet (см это как к http://goo.gl/60YkgX)

+0

Если мой веб-api отклоняет запрос, почему я могу пройти через код? Как он отклоняет запрос ПОСЛЕ запуска моего кода? – cgraus

+0

ОК, похоже, что эта статья теперь работает только с VS2013, поэтому я также могу попробовать пакет NuGet. Но я до сих пор не понимаю, почему он делает вызов, запуская код, THEN failing – cgraus

+0

Не могли бы вы отправить исходный HTTP-ответ с вашего сервера WebAPI здесь? Было бы полезно увидеть все, что возвращается после запроса. – Woodchipper

0

Это проблема с несоответствием протокола. Вы не можете отправить запрос перекрестного домена в HTTP-протокол, если запрос возник из протокола FILE. Попробуйте просмотреть страницу с помощью локального веб-сервера, чтобы просмотреть страницу в браузере с помощью HTTP. Я столкнулся с этой же проблемой - это сторона браузера и не проблема с вашим сервисом.

+0

ОК - это какой-то смысл, спасибо, я попробую это. – cgraus

+0

К сожалению, теперь он говорит, что источник http: // localhost: 1323 не разрешен Access-Control-Allow-Origin. Опять же, я могу пройти через свой код, ошибка возникает, когда код возвращает объект обратно в Safari. – cgraus

0

Вы можете использовать Microsoft.AspNet.Cors из NuGet и добавления

вар атр = новый EnableCorsAttribute ("", "", "GET"); config.EnableCors (attr);

к WebApiConfig.cs

+0

Microsoft.AspNet.WebApi.Cors от nuget и добавления –

Смежные вопросы