angular - 新标头未与拦截器一起添加
问题描述
我想向我的 Angular 8 应用程序中的所有 HTTPClients 添加标头。这是我的拦截器:
import { Injectable } from '@angular/core';
import { HttpEvent, HttpInterceptor, HttpHandler, HttpRequest, HttpHeaders } from '@angular/common/http';
import { Observable } from 'rxjs';
@Injectable()
export class Interceptor implements HttpInterceptor {
constructor(private toaster: ToastrService) {}
intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
alert('Interceptor!');
// Set headers
const headers = req.headers;
// Set this header for security
headers.set('test', 'value');
const authReq = req.clone({ headers });
return next.handle(authReq);
}
}
警报已执行,但测试标头未添加到请求中。
解决方案
来自官方文档:
您不能直接修改先前选项对象中的现有标头,因为 HttpHeaders 类的实例是不可变的。
请改用 set() 方法。它返回应用了新更改的当前实例的克隆。
您需要克隆请求并在那里设置标头。
const newReq = req.clone({ headers: req.headers.set('test', 'value') });
return next.handle(newReq);
推荐阅读
- php - 将 MysqlData 转换为 JSON
- python - 在 Discord 中更改机器人的头像
- html - div元素的CSS骨架动画
- sql-server - 插入到 sql server 的温和方式
- angular - @auth0/auth0-angular 中是否有使用电子邮件和密码登录的方法?
- mysql - SQL查询根据开始和结束时间查找并发会话
- typescript - 未提供“invokeMiddleware”的参数
- javascript - 在 JavaScript 中转义撇号等
- javascript - 如何在反应中更改日期格式?
- sql - SQL。比较当前行的值与上一行的相同比较结果的值