我需要从我公司持有的其他域中提取一些资源。我想通过GET请求提取安全的HTML内容。
当用户退出应用程序时,请求的内容将返回302登录页面。
我试图嗅到302避风港的标题已经归还了我迄今为止所希望的。我的Observable返回的响应是200(登录页面)。
这是我的示例应用。
export class MenuComponent implements OnInit {
private _resourceUrl = "http://localhost:3001/resources/menu";
constructor(private _http: Http){
}
menu: string;
ngOnInit(): void {
this.getMenu()
.subscribe(
response => {
console.log(`Response status: ${response.status}`);
this.menu = response.text();
},
error => console.log(<any>error));
}
getMenu(): Observable<Response>{
return this._http.get(this._resourceUrl)
.map((response: Response) => response)
.catch(this.handleError);
}
private handleError(error: Response){
console.log(error);
return Observable.throw(error.json().error || 'Server Error');
}
}
我是否在正确的轨道上?
答案 0 :(得分:21)
如果服务器发送带有302状态代码的重定向,并在Location
标头内重定向该URL,则重定向将由浏览器自动处理,即执行对此URL的请求。
这就是为什么XHR(以及它周围的Angular2包装器,即Http
类)不会看到第一个请求的结果,而只会看到第二个请求的响应。
答案 1 :(得分:0)
这是我重定向到ServiceData的工作代码。 Angular2(4)和ASP net Core。
private post(url: string, data?: any) {
return this.http.post(url, data, { headers: this.headers })
.map(response => this.extractData(response, true));
}
private extractData(res: Response, mapJson = true) {
let body: any = res;
// redirect
if (body.url.search('ReturnUrl') != -1) {
let url = new URL(body.url);
// get patch redirect simple /account/login
let pathname = url.pathname;
// get params redirect simple ?ReturnUrl=%2Fapi%2Fitems%2FGetitems
let search = url.search;
// 1 navigate with params
this.router.navigate.navigate([pathname], { queryParams: { returnUrl: search } });
// OR ...
// 2 navigate only pathname
this.router.navigate.navigate([pathname]);
return {};
}
if (mapJson) {
body = body.json();
}
return body || {};
}