首页 > 解决方案 > 角度 HTTP 请求返回 406

问题描述

我有一个 HTTP 请求的简单代码:

intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
  // add authorization header with jwt token if available
  request = this.addTokenToRequest(request);
  return next.handle(request)
  .pipe(
    catchError(error => {
      switch (error) {
              case 'Not Acceptable': {
                return this.handle406Error(request, next);
                break;
              }
              case 'Unauthorized': {
                // return this.handle401Error(request, next);
                break;
              }
        }
    }));

}

我得到了 406,因为我故意使用过期的令牌。但我得到的错误是=“OK”。根据我的代码,我得到“不可接受”。有什么想法吗?

谢谢

这是它的样子: 在此处输入图像描述

更新。以下是使用 AngularJS 前端从同一个应用程序返回 Response 对象时的样子:

config: {method: "GET", transformRequest: Array(1), transformResponse: 
Array(1), jsonpCallbackParam: "callback", paramSerializer: ƒ, …}
data: "Unauthenticated Token."
headers: ƒ (d)
status: 406
statusText: "Not Acceptable"
xhrStatus: "complete

标签: angularinterceptorangular-httpclient

解决方案


如果错误以字符串形式返回,则 http 响应状态将是成功状态(2XX),并且此代码将不起作用,但需要使用 rxjs 的 tap 函数对响应部分进行检查,但如果不是那么下面的代码将为您工作:

 intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
      // add authorization header with jwt token if available
      request = this.addTokenToRequest(request);
      return next.handle(request)
      .pipe(
        catchError(error => {
     if(error instanceof HttpErrorResponse) {
          switch (error.status) {
                  case '406': {
                   console.log('HttpResponseError with status 406');
                   console.log(of(error));
                   return this.handle406Error(request, next);
                   break;
                  }
                  case '401': {
                    // return this.handle401Error(request, next);
                    console.log('HttpResponseError with status 401')
                    break;
                  }
           default: {
                    return of(error);
                    break;
                  }
            }
      else{
           console.log('My error is not an HttpErrorResponse');

           console.log(error);
             }
         }

        }));
    }

推荐阅读