jQuery ajax 标头未设置



我正在尝试实现跨域请求,但失败得很惨。 我正在最新版本的Firefox,Chrome和IE10上尝试此操作。 我在所有浏览器中都获得了相同的体验。 我正在尝试设置身份验证标头或自定义标头键/值对,以便我可以在服务器上获取值。 我正在使用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));
    }       
});

服务器上的授权标头值为空。 我尝试用自定义密钥替换授权,但没有设置。 我尝试将其添加到 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((

相关内容

  • 没有找到相关文章