【发布时间】:2015-04-29 07:14:14
【问题描述】:
我正在尝试使用 AngularJS v1.3.15 创建对 ASP.NET WebAPI(来自 Nuget 的最新版本)的调用,以获取客户列表。我可以成功进行身份验证并取回令牌。我将令牌添加到身份验证标头,但是当我拨打电话时,它会被踢回来,说身份验证标头丢失。
我得到令牌后的 Angular 调用如下所示
$scope.baseUrl = "http://localhost:7800/";
$http({
method: 'GET',
url: $scope.baseUrl + 'customer',
headers: {
'Authorization': $scope.token
}})
我也尝试过使用 angularjs $resource
return $resource($scope.baseUrl + 'customer', { }, { 'get': { method: 'GET', isArray: true, headers: { 'Authorization': $scope.token } } });
在 WebApiConfig 注册方法中,我有以下设置
var cors = new EnableCorsAttribute("*","*","*");
config.EnableCors(cors);
在 DelegatingHandler 中,我像这样检查 Authorization 标头
var authHeader = request.Headers.Authorization;
在 Angular 应用程序中,它始终为 null。如果我从 Fiddler 和 PostMan 进行检查,我会得到 Authorization 标头。
当我在 Chrome 中按 F12 并查看请求标头时,这些是结果
OPTIONS /customer HTTP/1.1
Host: localhost:7800
Connection: keep-alive
Access-Control-Request-Method: GET
Origin: http://localhost:63342
User-Agent: Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2376.0 Safari/537.36
Access-Control-Request-Headers: accept, authorization
Accept: */*
Referer: http://localhost:63342/Test/index.html
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-US,en;q=0.8
【问题讨论】:
-
当您在浏览器中按 F12 并单击网络选项卡时,请求是否显示预期的标头?
-
不,它不存在,更新的问题是 chrome 请求标头
-
所以你知道问题出在客户端。现在搜索 $http 拦截器,您会发现数百个示例,说明如何将身份验证标头添加到您的请求中。看起来你有一些 CORS(跨源请求)正在进行,所以你也可能在那里遇到问题。但第一步是发送标头。