angular HTTP拦截器阻止请求继续进行并中断请求链

在Angular的HTTP拦截器中,如果你希望在特定条件下阻止请求继续进行并中断请求链,直接返回 false 实际上不会达到预期效果。Angular的HTTP拦截器期望拦截器方法 intercept 返回一个 Observable<HttpEvent<any>>。如果你想要中断请求,应该抛出一个错误或者返回一个错误的 Observable

例如,如果你在拦截器中判断到请求不符合要求,可以通过抛出错误或返回一个带有错误信息的 Observable 来中断请求

复制代码
import { Injectable } from '@angular/core';
import { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor, HttpErrorResponse } from '@angular/common/http';
import { Observable, throwError } from 'rxjs';
import { catchError } from 'rxjs/operators';

@Injectable()
export class MyInterceptor implements HttpInterceptor {

  intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    // 假设我们有一些条件判断
    if (/* 不符合要求的条件 */) {
      // 抛出错误,中断请求
      return throwError(new HttpErrorResponse({ status: 403, statusText: 'Forbidden by Interceptor' }));
    }

    // 如果条件符合,继续处理请求
    return next.handle(request).pipe(
      catchError(error => {
        // 可以在这里处理错误,决定是否重新抛出或转换错误
        return throwError(error);
      })
    );
  }
}

在这个例子中,如果请求不符合你的要求,拦截器会抛出一个 HttpErrorResponse,模拟一个HTTP错误响应,从而中断请求流程。这会使得请求不会到达服务器,而且错误可以通过订阅的错误处理逻辑来捕获。

相关推荐
KaMeidebaby3 分钟前
卡梅德生物技术快报|基因测序技术在 46,XY 性发育障碍变异筛查中的流程与数据分析
服务器·前端·数据库·人工智能·算法·数据挖掘·数据分析
m0_7381207215 分钟前
渗透测试基础——黑盒测试下的Web漏洞挖掘与利用解析(二)
服务器·前端·python·网络协议·安全·网络安全
weixin_4296302615 分钟前
3.50 WebARNav:边缘辅助视觉定位的移动Web AR室内导航
前端·ar
yivifu24 分钟前
CSS 自动级联编号有序列表完全指南
前端·css·c#·html·有序列表·级联编号
李白的天不白38 分钟前
pnpm
前端
jay神1 小时前
基于 Python + Flask + Vue 的校内求职互助平台
前端·vue.js·后端·python·flask·毕业设计
2501_940041741 小时前
从跑酷到实时联机:5个能直接用的Web游戏开发需求
前端
RANxy1 小时前
零基础全栈 React 入门(三):状态管理与事件处理
前端
Csvn1 小时前
前端调试技巧
前端
右耳朵猫AI1 小时前
React技术周刊 2026年第20周
前端·react.js·前端框架