访问/身份验证端点是在成功方法中将令牌作为数据返回还是在服务器端代码中设置了令牌?
-更新-
如果您在HttpContext.Current.Response.AppendHeader('X-Token', "<some token value">); 中设置令牌,您应该能够在您的 $http 承诺中获取它
$http.get("<api endpoint>").then(function(data){
$log.log("data.config", data.config);
$log.log("data.headers()", data.headers());
$log.log("X-Token Header", data.headers()['x-token']);
});
data.config 是发送到服务器的标头,例如接受和任何授权标头。
data.headers() 是返回在服务器端设置的所有标头的函数。
response.Headers.Add("Access-Control-Expose-Headers", TOKEN_NAME); 此行将确保此标头可用于服务器
因此,如果我正确理解您在 api 请求的标头中传递的 x-token 并且委托处理程序正在寻找 TOKEN_NAME 然后重置它,然后您尝试在 $http 的承诺中访问它。我刚刚为这个案例做了一个测试,我取回了 x-token;
-示例角度应用程序
(function () {
var app = angular.module('app', []);
app.config(function ($httpProvider) {
$httpProvider.defaults.headers.common["x-token"] = "";
});
app.controller('home', function ($http, $log) {
$http.get('/api/car/get')
.then(function (response) {
$log.log("Response headers",response.headers());
$log.log(response.headers()["x-token"]);
});
});
})();
-控制台窗口
-CustomDelegatingHandler 我不使用变量令牌,因为我没有令牌端点来获取一个。相反,我只是传回了一个随机 GUID。
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request,
CancellationToken cancellationToken)
{
return await base.SendAsync(request, cancellationToken).ContinueWith(task =>
{
var response = task.Result;
//Are you sure your passing this check by setting the x-token common header in your angular $http requests?
if (response.RequestMessage.Headers.Contains(TOKEN_NAME))
{
string token = response.RequestMessage.Headers.GetValues(TOKEN_NAME).FirstOrDefault();
response.Headers.Add("Access-Control-Expose-Headers", TOKEN_NAME);
response.Headers.Add(TOKEN_NAME, Guid.NewGuid().ToString());
}
return response;
}, cancellationToken);
}