我正在尝试实现跨域请求,但失败得很惨。 我正在最新版本的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((