Angular 2 个自定义的 Http headers 得到 405

Angular 2 Http with custom headers getting 405

我 运行 在尝试执行来自 angular 的 Http GET 请求时使用自定义 header 解决了这个问题 2. 执行来自 Postman 的相同请求工作正常,但是我在 Angular2 中收到以下 405 错误:

OPTIONS http://[somehost.com]/api/v1/admin/account/singin 405 (Method Not Allowed)

API 有一个 GET 操作,您在 header 中传递用户名和密码,它 returns 一个带有令牌的 200 header。这是我正在使用的代码块的示例:

constructor (private http: Http) {

}

login (userName: string, password: string): Observable<any> {

  const endPointUrl = this.baseUrl + '/admin/account/singin';

  const headers = new Headers({
    'Accept': 'application/json',
    'X-Rem-Username': userName,
    'X-Rem-Password': password
  });

  const options = new RequestOptions({headers: headers});

  return this.http.get(endPointUrl, options)
    .map((response: Response) => {
      console.log(response);
      return response;
    });
}

正如我提到的,在 Postman 和 WebStorm REST 客户端中使用这些 header 执行此请求工作正常。如果我删除这些 'X-Rem' headers 我得到一个 401,这是预期的。如有任何帮助,我们将不胜感激。

我不确定,但你可以尝试添加这个 header:

  "Access-Control-Expose-Headers" : "Authorization"

我在这个discussion

中找到了它

这不是 angular 应用程序的问题。您的应用和休息 api 服务器不同 server/domain。您应该在服务器中配置跨域允许。每当您通过 Web 浏览器在服务器上请求任何 api 时,它首先通过请求 OPTION 方法检查跨域允许选项。在postman中api直接发送,没有跨域。

试试这个

const headers = new Headers({
    'Accept': 'application/json',
    'X-Rem-Username': userName,
    'X-Rem-Password': password
});

this.http.get('url', {headers: headers})