我正在学习Angular6 Http和拦截器。
我创建了一个拦截器
@Injectable()
export class HttpsRequestInterceptor implements HttpInterceptor {
intercept(
req: HttpRequest<any>,
next: HttpHandler
): Observable<HttpEvent<any>> {
console.log(req);
if(req.url == 'https://abcd.azure.net/api/v1/getPendinList') {
// return Observable.empty();
console.log('hello')
}
const dupReq = req.clone({
headers: req.headers.set('Consumer-Secret', 'some sample key')
});
return next.handle(dupReq);
}
}
这很正常我每次点击https://abcd.azure.net/api/v1/getPendinList
都会得到console.log。我想要实现的是,如果我点击这个网址,我想将此网址更改为其他内容,例如。 abcd.api.com/search
。这样我的url就可以从新端点获取数据。
这是可能的以及如何。
答案 0 :(得分:4)
是的,您可以使用新的HTTPREQUEST
覆盖网址或克隆。但是您无法直接分配新网址,因为它是一个常量/只读属性。
//Added these lines
//const httpRequest = new HttpRequest(<any>req.method, 'abcd.api.com/search');
//req = Object.assign(req, httpRequest);
@Injectable()
export class HttpsRequestInterceptor implements HttpInterceptor {
intercept(
req: HttpRequest<any>,
next: HttpHandler
): Observable<HttpEvent<any>> {
console.log(req);
const httpRequest = new HttpRequest(<any>req.method,'abcd.api.com/search');
req = Object.assign(req, httpRequest);
if(req.url == 'https://abcd.azure.net/api/v1/getPendinList') {
// return Observable.empty();
console.log('hello')
}
const dupReq = req.clone({
headers: req.headers.set('Consumer-Secret', 'some sample key')
});
return next.handle(dupReq);
}
}
答案 1 :(得分:2)
ngLover答案的问题是他覆盖了所有内容,因为他正在创建新的带有空正文的http请求 正确的答案实际上更简单
const newUrl = {url: 'new-url'};
req = Object.assign(req, newUrl);
那样,只有url
属性将被覆盖,其余属性(包括正文)将保持不变
答案 2 :(得分:2)
来自: https://stackoverflow.com/a/45735866/1778005
这对我有用:
const dupReq = req.clone({ url: 'mynewurl.com' });
return next.handle(dupReq);