我从一个服务器接收了大约multipart/mixed
个内容,其中包含一些JSON和字节,需要将其解析为Angular中的一个对象.
这就是我发送请求的方式:
public sendRequest(headerData: string): Observable<MultipartResponse> {
let requestHeaders: HttpHeaders = new HttpHeaders();
requestHeaders = requestHeaders.set("X-Header-Data", headerData);
return httpClient.get("localhost:12345/myroute", { headers: requestHeaders}) as Observable<MultipartResponse>;
}
我实现了一个HttpInterceptor
来解析响应,如下所示:
@Injectable({ providedIn: 'root' })
export class MyInterceptor implements HttpInterceptor {
public intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
return next.handle(request).pipe(map((event: HttpEvent<any>) => {
if (event instanceof HttpResponse)
return response.clone({ body: new MultipartResponse(event.body); });
return event;
}));
}
}
然后把它注册成main.ts
bootstrapApplication(AppComponent, {
providers: [
importProvidersFrom(HttpClientModule),
provideHttpClient(withInterceptorsFromDi()),
{
provide: HTTP_INTERCEPTORS,
useClass: MyInterceptor,
multi: true
}
],
}).catch((err) => console.error(err));
现在,当我发出请求时,拦截器在确认请求已成功发送的Sent
事件上触发一次,但之后再也没有触发过.相反,响应直接进入调用方,然后调用方抛出错误,因为它试图将整个正文解析为JSON.