angular - 在响应中获取状态零而不是 401

标签 angular rxjs http-status-code-401

我正在向需要身份验证的服务发送请求,由于我当前的状态不是,我收到了 401 响应。我想看看我是否可以在我的代码中处理这个问题,在客户端并用 Typescript 编写:

this.http.post(url, body, options).catch(e => {
    if (e.status === 401) {
        //Handle 401
    }
    return Observable.throw(e);
});

但问题是e.status即使从网络面板我可以看到响应的状态实际上是 401,它也为零。这是 Angular 的问题还是我做错了什么?

这是 JSON.strigify(e) 的返回值:
{
    "_body": { "isTrusted": true },
    "status": 0,
    "ok": false,
    "statusText": "",
    "headers": {},
    "type": 3,
    "url": null
}

顺便说一句,我使用的是 Angular 4.0.0(核心和 http)。

由于上面发送的发布请求,这是我在控制台中遇到的错误:
(2) POST http://192.168.2.10:8080/test 401 ()
XMLHttpRequest cannot load http://192.168.2.10:8080/test. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://192.168.2.10:4200' is therefore not allowed access. The response had HTTP status code 401.

另一个谜团是控制台上报告了 2 个 post 请求错误,而根据网络面板仅发送了一个。

最佳答案

如果您想知道您的服务的错误状态

 import { Injectable } from '@angular/core';
 import { Http, Response, Headers } from '@angular/http';
 import 'rxjs/add/operator/map';
 import { Observable } from 'rxjs/Observable';
 import 'rxjs/add/observable/throw';
 import 'rxjs/add/operator/catch';



 @Injectable()
 export class ExampleService {

    headers: Headers;

    constructor(private http: Http) {
            this.headers = new Headers();
            this.headers.append('Content-Type', 'application/json; charset=utf-8');
            this.headers.append('Accepts', '*/*');
            // this.headers.append()
    }

  service1() {

     let url = 'http://example.com/products';
     return this.http.get(url, this.headers).map((resp: Response) => { 
                    console.log('resp status', resp.status);
                    return resp.json();
            }).catch((resp: Response) => {
                    let details = resp.json();
                    console.log(resp.status); // here you get the error code in your case 401
                    return Observable.throw(details);
            });
  }
}

在示例中,动词 http 是 GET,您可以尝试使用 POST,这是相同的想法。

我希望它能帮助你

关于angular - 在响应中获取状态零而不是 401,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44764968/

相关文章:

javascript - Jasmine spyOn 与 Observables - 使用箭头函数与将函数传递给 RxJs 运算符

angular - 如何有条件地更新 Angular 路由解析器数据?

asp.net - 具有 HTTP 401 状态的无限循环

android - 使用 RoboSpice 有没有办法从异常中获取 HTTP 错误代码?

angular - 带有 Angular 和 Typescript 的策略模式

Angular:来自 json 数据的 TreeView

javascript - HTML 模式与禁止名称

javascript - 使用模块 xlsx 样式时无法找到命名空间 XLSX

oauth - 访问 Dynamics CRM 2016 Web API 时出现 401

angular - RxJs 运算符、forkJoin 在 Angular 11 中显示超过 6 个参数的错误