jQuery ajax заголовок не установлен

0

Я пытаюсь выполнить междоменный запрос, и я терплю неудачу. Я пробую об этом в последних версиях 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);
    }
}

Этот код никогда не срабатывает, потому что авторизация не может быть установлена. Что мне не хватает. Я прочитал много сообщений, которые, кажется, используют мой подход, и, похоже, они работают на них. Любое понимание очень ценится. Спасибо за вашу помощь.

  • 1
    Вы пытались использовать свойство headers вместо установки его в beforeSend ?
Теги:
http-headers
asp.net-web-api
cross-domain

1 ответ

0
Лучший ответ

Попробуй это,

....
  type: "GET",
  beforeSend : function(xhr) {
    xhr.setRequestHeader("Authorization", "Foooo");
  },
....

Читайте setRequestHeader() и $.ajax()

  • 0
    да, я пробовал это, и точки останова никогда не достигаются.
  • 0
    Это может помочь вам stackoverflow.com/questions/11540086/…
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню