2015-01-14 4 views
1

Я использую jquery, чтобы сделать ajax-вызов метода веб-API asp.net, который использует токен авторизации для аутентификации запросов. Здесь вызов Ajax:Ajax Call To Web API

$.ajax({ 
    url: targetUrl, 
    type: 'GET', 
    beforeSend: function(xhr){ 
     xhr.setRequestHeader("Authorization", "Basic " + btoa(token + ":" + password)); 
    }, 
    success: function (data) { 
     // do stuff 
    } 
}); 

Этот вызов приводит к 405 Method Not Allowed для метода OPTIONS. Кажется, что это проблема с поддержкой CORS в веб-API.

Но метод Web API работает как ожидается, если вызывается из простого приложения .NET консоли:

HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(url); 
req.Headers[HttpRequestHeader.Authorization] = "Basic " + token + ":" + password; 
HttpWebResponse res = (HttpWebResponse)req.GetResponse(); 

Это также работает, если вызывается из Скрипач.

Если метод Web API не поддерживает CORS, почему эти другие вызовы работают? Я что-то пропустил в своем вызове jQuery?

P.S. У меня нет доступа к базе кода Web API.

Заранее благодарим за помощь!

ответ

1

Почему эти другие звонки работают?

Поскольку другие вызовы не выполняются с помощью JavaScript, запущенного на веб-странице, посещаемой браузером на клиентском компьютере. Они создаются с помощью программного обеспечения, которое было явно установлено на клиентском компьютере.

Одинаковая политика происхождения заключается в том, чтобы остановить веб-сайт A, используя браузер пользователя B, для запроса данных с веб-сайта C с использованием учетных данных пользователя B.

CORS - это способ для веб-сайта C сообщить браузеру, что он может ослабить политику одного и того же происхождения.

Поскольку политика «того же происхождения» не применяется за пределами браузера, запрос предварительной проверки OPTIONS, который требуется для спецификации CORS, даже не отправлен в ваши другие тесты.