我正在尝试登录系统。在角度1中,有设置方法
withCredentials:true
但是我找不到angular2
中的工作解决方案export class LoginComponent {
constructor(public _router: Router, public http: Http, ) {
}
onSubmit(event,username,password) {
this.creds = {'Email': 'harikrishna@gmail.com','Password': '01010','RememberMe': true}
this.headers = new Headers();
this.headers.append('Content-Type', 'application/json');
this.http.post('http://xyz/api/Users/Login', {}, this.creds)
.subscribe(res => {
console.log(res.json().results);
});
}
}
答案 0 :(得分:8)
在Angular中> 2.0.0(实际上来自RC2),只是
http.get('http://my.domain.com/request', { withCredentials: true })
答案 1 :(得分:5)
AFAIK,现在(beta.1)该选项不可用。
你必须解决这个问题:
let _build = http._backend._browserXHR.build;
http._backend._browserXHR.build = () => {
let _xhr = _build();
_xhr.withCredentials = true;
return _xhr;
};
答案 2 :(得分:2)
angular2团队已经注意到了这个问题。
您可以在issue link之后找到一些其他解决方法(一种特别是作为@Injectable编写的)。
答案 3 :(得分:1)
如果有人使用普通的JS,基于cexbrayat的答案:
app.Service = ng.core
.Class({
constructor: [ng.http.Http, function(Http) {
this.http = Http;
var _build = this.http._backend._browserXHR.build;
this.http._backend._browserXHR.build = function() {
var _xhr = _build();
_xhr.withCredentials = true;
return _xhr;
};
}],
答案 4 :(得分:0)
我认为你没有以正确的方式使用post
metrhod。你可以试试这样的东西:
onSubmit(event,username,password) {
this.creds = {
'Email': 'harikrishna@gmail.com',
'Password': '01010','RememberMe': true
}
this.headers = new Headers();
this.headers.append('Content-Type', 'application/json');
this.http.post('http://xyz/api/Users/Login',
JSON.stringify(this.creds),
{ headers: headers });
}
您可以反转参数。第二个参数对应于要发送到POST的内容,应该定义为字符串。此级别尚不支持对象。请参阅此问题:https://github.com/angular/angular/issues/6538。
如果要设置特定标头,则需要在Headers
方法的第三个参数中添加post
对象。
否则,如果您想在跨域请求中发送cookie,我认为withCredentials
属性与CORS相关。您可以查看此链接以获取更多详细信息:
希望它可以帮到你, 亨利
答案 5 :(得分:0)
getHeaders(): RequestOptions {
let optionsArgs: RequestOptionsArgs = { withCredentials: true }
let options = new RequestOptions(optionsArgs)
return options;
}
getAPIData(apiName): Observable<any> {`enter code here`
console.log(Constants.API_URL + apiName);
let headers = this.getHeaders();
return this.http
.get(Constants.API_URL + apiName, headers)
.map((res: Response) => res.json())
}
在webapi中启用了cors
相同的代码在chrome(普通),Internet Explorer中可以正常工作
但是它要求Windows登录提示使用隐身的chrome,firefox,edge。 分享建议以解决此问题