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(这应该是 (被编码/解码)
这是我已经完成的代码。当我调试它时,解码的数据(即)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 => {...}));