我是Angular的新人,我有这样的服务:
readonly rootUrl = "http://myapi.net/";
private serviceUrl = "http://myapi.net/api/usuarios/listar";
headers = new Headers({
Authorization:
"Bearer " + JSON.parse(localStorage.getItem("currentUser")).token,
"Content-Type": "application/json"
});
options = new RequestOptions({ headers: this.headers });
所以我得到了用户身份验证,然后我创建了如下方法:
constructor(private http: Http) {}
postSwitch() {
var cambioEstatus = this.http
.put(this.rootUrl + "api/usuarios/activar", this.options)
.map((data: any) => data.json());
return cambioEstatus;
}
最后在组件中使用:
onFlagChange(event) {
this.UsuariosService.postSwitch().subscribe(
() => {
//React to your HTTP request success
this.toastr.success("Success");
},
err => {
this.toastr.error("Fail");
//React to your HTTP request error
}
);
}
但是它总是返回错误401未经授权,如果我用邮递员执行它就不会引起错误。另一种方法(得到)如:
listarEmpresas() {
var empresas = this.http
.get(this.rootUrl + "api/empresas/listar", this.options)
.map((data: any) => data.json());
console.log(empresas);
return empresas;
}
不要抛出这个错误,我还需要为put
行动做些什么?此致
答案 0 :(得分:1)
看起来像CORS问题,您需要在服务器上启用CORS或尝试添加 到你的标题。
Access-Control-Allow-Origin: *
另外,请尝试根据您的请求传递正文。
postSwitch() {
var cambioEstatus = this.http
.put(this.rootUrl + "api/usuarios/activar", body, this.options)
.map((data: any) => data.json());
return cambioEstatus;
}
为了启用CORS进行测试,请使用以下chrome标志
chrome.exe --user-data-dir="C:/Chrome dev session" --disable-web-security
答案 1 :(得分:0)
我遇到了同样的问题...我认为问题在于put需要一个请求正文,而get不需要,因此在url和选项之间,您需要一个正文,例如.get(this.rootUrl + "api/empresas/listar", {}, this.options)
>