如何发送数据(Angular 2)?

时间:2016-01-14 16:27:49

标签: angular typescript xmlhttprequest httprequest

我正在尝试使用Angular 2通过http请求发送凭据,但Angular 2 Http get请求不会发送凭据。 我做错了什么?

var creds = "username=" + this.username + "&password=" + this.password;
var headers = new Headers();
headers.append('Content-Type', 'application/x-www-form-urlencoded');

http.get('http://localhost:3000', {
    headers: headers,
    credentials: creds
})
.map(res => res.json())
.subscribe(
    data => this.data(data),
    err => this.error(err),
    () => console.log('Done')
);

3 个答案:

答案 0 :(得分:2)

我认为您希望使用HTTP基本身份验证来访问受保护的HTTP资源。因此,您的凭据需要在Authorization标头中设置,如下所述:

createAuthorizationHeader(headers:Headers) {
  headers.append('Authorization', 'Basic ' +
    btoa('username:password')); 
}

getData() {
  var headers = new Headers();
  this.createAuthorizationHeader(headers);

  this.http.get('http://localhost:3000'', {
    headers: headers
  }).map(res => res.json())
    .subscribe(
      data => this.data(data),
      err => this.error(err),
      () => console.log('Done')
}

您可以注意到您的凭据必须是base64编码的。

您的请求似乎是跨域的,因此适用CORS概念。您可以查看此链接以获取更多详细信息:http://restlet.com/blog/2015/12/15/understanding-and-using-cors/。这就是说我不认为你的问题与CORS有关。

我在RequestOptions课程中看不到任何credentials属性。

希望它可以帮到你, 亨利

答案 1 :(得分:1)

试试这段代码,它必须有效:



var creds = "username=" + this.username + "&password=" + this.password;
var headers = new Headers();
headers.append('Content-Type', 'application/x-www-form-urlencoded');

http.get('http://localhost:3000' + creds, {
 headers: headers,
 })
 .map(res => res.json())
 .subscribe(
 data => this.data(data),
 err => this.error(err),
 () => console.log('Done')




答案 2 :(得分:0)

在您的应用配置中

尝试:

  $httpProvider.defaults.withCredentials = true;

所以你的app配置看起来像这样:

angular.module('myappService', [
    'fdvService.constants',
]).config(['$httpProvider',function ($httpProvider) {
      $httpProvider.defaults.withCredentials = true;
  }]);