停止 http 拦截器覆盖从服务层 angular 传递的 headers
Stop http interceptor to overwrite the headers passed from service layer angular
我有一个 API 以纯文本形式发送数据。我需要在服务层传递 { responseType:'text'} 但它没有到达拦截器。
如何为特定的 API 传递 headers & responseType,以便它到达拦截器并基于 API URL,可以传递来自服务层的 header ?
拦截器代码-
@Injectable()
export class JwtInterceptor implements HttpInterceptor {
constructor(private authenticationService: AuthenticationService) {}
intercept(
request: HttpRequest<any>,
next: HttpHandler
): Observable<HttpEvent<any>> {
// add authorization header with jwt token if available
console.log("request", request.headers);
const token = this.authenticationService.currentUserValue;
if (token && token.token) {
if (!request.url.includes("testAPI/")) {
const newRequest = request.clone({
setHeaders: {
Authorization: `Bearer ${token.token}`,
}
});
return next.handle(newRequest);
} else {
const newRequest = request.clone({
setHeaders: {
Authorization: `Bearer ${token.token}`,
"Content-Type": "text/plain",
Accept: "text/plain",
responseType: "text",
}
});
return next.handle(newRequest);
}
}
}
}
服务代码-
testFunction(token) {
let headers = new HttpHeaders();
headers = headers.set('Authorization', `Bearer ${token}`);
headers = headers.set("Content-Type", "text/plain");
headers = headers.set('Accept', "text/plain");
return this.apiSrv.get(TEST_API, {headers:headers,responseType:'text'});
}
它在禁用 http 拦截器并传递如下选项后起作用。 responseType 参数应与 header 分开传递以使其工作。
{headers:headers,responseType:'text'}
但我不想 disable/remove 拦截器。当我启用拦截器时,它要么覆盖服务中传递的 headers,要么 headers 没有到达拦截器。我在 testFunction 中通过了 headers 但是当我调试时它显示。
请指导我。如何让它发挥作用?
我像下面这样在拦截器中传递了 headers,它起作用了。
const newRequest = request.clone({ setHeaders: { Authorization: Bearer ${token.token}, "Content-Type": "text/plain", Accept: "text/plain" },responseType: "text", });
我有一个 API 以纯文本形式发送数据。我需要在服务层传递 { responseType:'text'} 但它没有到达拦截器。 如何为特定的 API 传递 headers & responseType,以便它到达拦截器并基于 API URL,可以传递来自服务层的 header ?
拦截器代码-
@Injectable()
export class JwtInterceptor implements HttpInterceptor {
constructor(private authenticationService: AuthenticationService) {}
intercept(
request: HttpRequest<any>,
next: HttpHandler
): Observable<HttpEvent<any>> {
// add authorization header with jwt token if available
console.log("request", request.headers);
const token = this.authenticationService.currentUserValue;
if (token && token.token) {
if (!request.url.includes("testAPI/")) {
const newRequest = request.clone({
setHeaders: {
Authorization: `Bearer ${token.token}`,
}
});
return next.handle(newRequest);
} else {
const newRequest = request.clone({
setHeaders: {
Authorization: `Bearer ${token.token}`,
"Content-Type": "text/plain",
Accept: "text/plain",
responseType: "text",
}
});
return next.handle(newRequest);
}
}
}
}
服务代码-
testFunction(token) {
let headers = new HttpHeaders();
headers = headers.set('Authorization', `Bearer ${token}`);
headers = headers.set("Content-Type", "text/plain");
headers = headers.set('Accept', "text/plain");
return this.apiSrv.get(TEST_API, {headers:headers,responseType:'text'});
}
它在禁用 http 拦截器并传递如下选项后起作用。 responseType 参数应与 header 分开传递以使其工作。
{headers:headers,responseType:'text'}
但我不想 disable/remove 拦截器。当我启用拦截器时,它要么覆盖服务中传递的 headers,要么 headers 没有到达拦截器。我在 testFunction 中通过了 headers 但是当我调试时它显示。
请指导我。如何让它发挥作用?
我像下面这样在拦截器中传递了 headers,它起作用了。
const newRequest = request.clone({ setHeaders: { Authorization: Bearer ${token.token}, "Content-Type": "text/plain", Accept: "text/plain" },responseType: "text", });