用途:在 Angular 21(2025)中编写与配置 HTTP 拦截器,处理请求/响应转换、鉴权头注入和 HTTP 错误处理。标签为 HTTP、Interceptors、Auth、Middleware。
主要能力与 API 变化:新增函数式拦截器,使用 HttpInterceptorFn 替代基于类的写法;新增 provideHttpClient 配合 withInterceptors 的现代注册方式;新增 HttpContext 与 HttpContextToken 实现按请求的元数据;基于类的 HttpInterceptor 已弃用,建议迁移到函数式。
使用方式:定义函数式拦截器,例如 authInterceptor 通过 inject(AuthService) 获取 token,并用 req.clone({ setHeaders: { Authorization: Bearer ${token} } }) 附加请求头后调用 next。注册时在应用配置的 providers 中使用 provideHttpClient(withInterceptors([authInterceptor, logInterceptor]))。错误处理可在拦截器中用 catchError 捕获 HttpErrorResponse,例如 status 为 401 时通过 inject(Router).navigate(['/login']) 跳转,并 return throwError(() => error)。多个拦截器按数组顺序生效,顺序有意义。按请求标记可用 HttpContextToken,例如 const CACHE_KEY = new HttpContextToken<boolean>(() => false),在拦截器中通过 req.context.get(CACHE_KEY) 判断,调用时传入 context: new HttpContext().set(CACHE_KEY, true)。请求转换可对匹配 URL 的请求 clone 并设置自定义头;响应转换可在管道中用 map 判断 HttpResponse 后 clone 并修改 body。
适用场景:需要统一注入鉴权信息、记录日志、转换请求或响应数据、集中处理 HTTP 错误的 Angular 应用。
限制:资料仅覆盖上述 API 与示例,未提供安装命令、版本兼容细节、性能影响或测试方式,这些暂未提供。