Angular 角度6-http拦截器-HttpResponse主体未被修改
我只是在实现Angular 角度6-http拦截器-HttpResponse主体未被修改,angular,angular6,angular-http,angular-http-interceptors,Angular,Angular6,Angular Http,Angular Http Interceptors,我只是在实现HttpInterceptor,我想base64对请求主体进行编码,并base64对响应主体进行解码 方法:HTTP Post请求/响应 数据格式:json(这应该是 (被编码/解码) 这是我已经完成的代码。当我调试它时,解码的数据(即)json被设置回event.body。但是,它并没有在服务中得到接收,这实际上是进行http调用的原因 @Injectable() export class Base64Interceptor implements HttpInterceptor
HttpInterceptor
,我想base64
对请求主体进行编码,并base64
对响应主体进行解码
- 方法:HTTP Post请求/响应
- 数据格式:json(这应该是 (被编码/解码)
event.body
。但是,它并没有在服务中得到接收,这实际上是进行http调用的原因
@Injectable()
export class Base64Interceptor implements HttpInterceptor {
constructor(private base64UtilService: Base64UtilService) {
}
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
let requestClone = request.clone(
{
body: this.base64UtilService.encode(JSON.stringify(request.body)),
responseType: 'text'
}
)
return next.handle(requestClone).pipe(tap(event => {
if (event instanceof HttpResponse) {
debugger;
let decodedData = this.base64UtilService.decode(event.body);
event = event.clone({
body: decodedData
});
return event;
}
},
(err: any) => {
if (err instanceof HttpErrorResponse) {
console.log(err);
}
}))
}
}
我通过使用map而不是tap成功地获得了修改后的响应体:
return next.handle(requestClone).pipe(map(event => {...}));
这是因为map和tap的行为:
从:
对可观测源上的每个发射执行副作用,但返回与源相同的可观测值
来自:“将给定的项目函数应用于源可观察对象发出的每个值,并将结果值作为可观察对象发出。”请发布您的
http
调用方法。@hrdkisback我已添加到PostThank@Cristina,我将尝试您的解决方案并回来!
return next.handle(requestClone).pipe(map(event => {...}));