angular - 角度 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
解决方案
如果错误以字符串形式返回,则 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);
}
}
}));
}
推荐阅读
- angular - 设置 FormControl 的值会破坏其类型
- excel - 在第一次出现值后删除所有行
- android-studio - 如何在 Android Studio 中格式化列表以保持水平?
- linux - 没有提供错误 - 添加新的 Yocto 层和新机器
- javascript - Javascript:将对象数组转换为具有相同属性值的对象连续放入子数组的新数组
- lazarus - lazarus DBGrid 查找字段(无创建)
- r - 如何在R中编写函数
- google-cloud-firestore - 使用 Firestore 安全规则检查缺席字段
- python - 遍历熊猫系列给出
- python - 如何在 KITTI 数据集上复制 OpenCV SGBM 的错误值?