Я пытаюсь выполнить междоменный запрос, и я терплю неудачу. Я пробую об этом в последних версиях Firefox, Chrome и IE10. Я получаю такой же опыт во всех браузерах. Я пытаюсь установить заголовок Authentication или пользовательскую пару ключа/значения паттерна, чтобы я мог получить значение на моем сервере. Я использую jQuery 2.03.
$.ajax({
type: "GET",
beforeSend: function (xhr, settings)
{
$.extend(settings, { headers: { "Authorization": "121212" } });
},
url: url,
dataType: "json",
processData: false,
crossDomain: true,
success: function (msg)
{
alert('it works!!!');
},
error: function (jqXHR, textStatus, errorThrown)
{
alert("error dude: " + JSON.stringify(jqXHR));
}
});
Значение заголовка авторизации на сервере равно null. Я попытался заменить авторизацию на пользовательский ключ, и он не устанавливается. Я попытался добавить это к вызову ajax:
headers: { Authorization: "fooooo" },
Но это приводит к тому, что вызов ajax никогда не доходит до сервера. Мои точки останова никогда не достигаются, когда я добавляю заголовки: атрибут вызова ajax. Однако, если я оставлю это, тогда мои точки останова будут удалены.
Я обращаюсь к контроллеру ASP.Net MVC WebApi. У меня есть обработчик, созданный для перехвата запроса и получения значения авторизации, чтобы я мог аутентифицировать пользователя для его поездки в мой WebAPI:
public class AuthorizationHeaderHandler : DelegatingHandler
{
protected override Task<HttpResponseMessage> SendAsync
(
HttpRequestMessage request,
CancellationToken cancellationToken
)
{
IEnumerable<string> apiKeyHeaderValues;
if (request.Headers.TryGetValues("Authorization", out apiKeyHeaderValues))
{
var apiKeyHeaderValue = apiKeyHeaderValues.First();
var user = SecurityRepository.GetUserByUserKey(apiKeyHeaderValue);
IList<Claim> claimList = new List<Claim>();
claimList.Add(new Claim(ClaimTypes.Name, user.Name));
claimList.Add(new Claim(GALClaimTypes.UserKey, user.UserKey.ToString(CultureInfo.InvariantCulture)));
claimList.Add(new Claim(GALClaimTypes.AuthenticationId, user.AuthenticationId.ToString(CultureInfo.InvariantCulture)));
claimList.Add(new Claim(GALClaimTypes.PersonId, user.PersonId.ToString(CultureInfo.InvariantCulture)));
claimList.Add(user.EmailAddress != null
? new Claim(ClaimTypes.Email, user.EmailAddress)
: new Claim(ClaimTypes.Email, "unknown"));
var identity = new ClaimsIdentity(claimList, "ApiKey");
var principal = new ClaimsPrincipal(identity);
Thread.CurrentPrincipal = principal;
}
return base.SendAsync(request, cancellationToken);
}
}
Этот код никогда не срабатывает, потому что авторизация не может быть установлена. Что мне не хватает. Я прочитал много сообщений, которые, кажется, используют мой подход, и, похоже, они работают на них. Любое понимание очень ценится. Спасибо за вашу помощь.
Попробуй это,
....
type: "GET",
beforeSend : function(xhr) {
xhr.setRequestHeader("Authorization", "Foooo");
},
....
Читайте setRequestHeader() и $.ajax()
headers
вместо установки его вbeforeSend
?