AngularJS将响应作为头/Web API传递

AngularJS将响应作为头/Web API传递,angularjs,asp.net-web-api,Angularjs,Asp.net Web Api,我是新手,但我正在学习。 我的目标是:我有一个登录视图,它将用户对象传递给我们的API,API根据用户数据库对其进行检查,并使用Base64转换用户名和密码来回复。我还设置了一个页面,如果用户通过授权,它将返回一些简单的JSON:Base。。。作为标题,它们将接收数据。如果没有,它将响应401,我将设置一个全局401处理程序,以路由回“/login” 我的问题是,在我的登录服务中,我收到了Base64密钥,我可以提醒它,以表明我收到了它。但是,如果我将此服务作为这样的标题注入json页面,我会得

我是新手,但我正在学习。 我的目标是:我有一个登录视图,它将用户对象传递给我们的API,API根据用户数据库对其进行检查,并使用Base64转换用户名和密码来回复。我还设置了一个页面,如果用户通过授权,它将返回一些简单的JSON:Base。。。作为标题,它们将接收数据。如果没有,它将响应401,我将设置一个全局401处理程序,以路由回“/login”

我的问题是,在我的登录服务中,我收到了Base64密钥,我可以提醒它,以表明我收到了它。但是,如果我将此服务作为这样的标题注入json页面,我会得到一个“未定义的”

$http.get('http://myURL/api/project', { headers: {"Authorization": "Basic " +    userLoginService.myData}})

所以我尝试做的基本事情是将数据从一个服务传递到另一个服务,我已经看到了如何从一个控制器传递到另一个控制器,但我不确定在这里要做什么。任何示例代码都将非常棒。非常感谢。

我不确定您是否可以在不将数据作为参数传递给方法或构造函数的情况下,将数据从一个服务共享到另一个服务。 e、 g

但是您可能希望为将来的http请求存储身份验证密钥,并且最好以一种不需要您在每次需要发出请求时请求身份验证的方式存储此密钥。我建议您将令牌存储在浏览器的localstorage中或作为cookie,以便您可以通过用户登录的术语检索令牌



作为旁注,如果您发现每次进行API调用时都必须传递授权标头,则可能需要在模块本身上配置$httpProvider(本例假设您使用的是LocalStorange,并且您的LocalStorage中存储有authKey:

angular.module('myApp', []).run(function($http, LocalStorageFactory){
    $http.defaults.headers.common['Authorization'] = 'Basic ' + LocalStorageFactory.get('authKey');
});

到目前为止,我所做的是:当我从API获得响应时,我将其设置为cookie

var token = "";
token = $cookieStore.get('token');
 $http({method: "GET", url:"http://example.com/api/project", headers:{'Authorization' : 'Basic ' + token}})
然而,当我以这种方式设置标题时,我的应用程序甚至不运行GET

Object { transformRequest=[1], transformResponse=[1], method="GET", more...}

当我单击此按钮时,我可以看到正在设置标题,但应用程序没有执行GET操作,距离如此之近但如此之远。有什么想法吗?

在您发布的后一段代码中,我注意到两件大事。1:您在myApp.RUN方法中设置标题,我以为这应该在配置端完成。2:您正在设置标题th$http.defaults…我以为应该使用$httpProviderI来完成。我将在应用程序上的run方法中存储令牌并设置标头。我会尽快让您知道我的结果:)您是否介意演示如何将数据响应从srvice保存到localStorage?可以在配置或运行中完成。我在run中展示了它,因此Angular可以设置应用程序的模块,并且您可以访问LocalStorageFactory*。如果您没有在工厂中包装localStorage,则可以使用config和$httpProvider并插入localStorage中存储的身份验证令牌。*使用LocalStorageFactory是可选的;我会将它的API封装在工厂中,以使用cookies作为备份。如果您对此不感兴趣,那么从配置中使用localStorage,您应该不会有问题。**有关LocalStorage API的信息,请访问
Object { transformRequest=[1], transformResponse=[1], method="GET", more...}