AngularJS将Response作为头/ Web API传递

时间:2013-07-19 12:41:24

标签: angularjs asp.net-web-api

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

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

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

所以我要做的基本事情是将数据从一个SERVICE传递到另一个SERVICE,我已经看到如何从一个CONTROLLER到另一个控制器,但是,我不知道该怎么做。任何示例代码显然都很棒。非常感谢。

2 个答案:

答案 0 :(得分:0)

我不确定您是否可以将数据从一个服务共享到另一个服务,而无需将数据作为参数传递给方法或构造函数。 e.g。

//inside of a service
this.makeAPIcall = function(token){
    $http.get('http://...', {headers: {'Authorization': 'Basic ' + token}});
}

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



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

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

答案 1 :(得分:0)

所以,到目前为止我做了什么:当我从API获得响应时,我将其设置为cookie。在我用来获取一些JSON的服务中,我在标题中设置了cookie,如此

var token = "";
token = $cookieStore.get('token');
 $http({method: "GET", url:"http://example.com/api/project", headers:{'Authorization' : 'Basic ' + token}})

然而,当我以这种方式设置标题时,我的应用程序甚至不运行GET。相反,在firebug Console中,我看到了

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

当我点击这个时,我可以看到有标题正在设置,但是应用程序没有执行GET操作,所以关闭但距离很远。有什么想法吗?