【问题标题】:Angular 2 Http with custom headers getting 405带有自定义标头的 Angular 2 Http 得到 405
【发布时间】:2017-04-23 07:21:33
【问题描述】:

我在尝试执行来自 Angular 2 的 Http GET 请求时遇到了自定义标头的问题。从 Postman 执行相同的请求工作正常,但是我在 Angular2 中收到以下 405 错误:

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

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

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 客户端中使用这些标头执行此请求工作正常。如果我删除这些“X-Rem”标题,我会得到一个 401,这是预期的。任何帮助将不胜感激,谢谢。

【问题讨论】:

  • X-Rem-UsernameX-Rem-Password 添加到您的 CORS 响应标头 Access-Control-Allow-Headers.. 假设您已经在服务器上设置了 CORS。
  • 您好,我会要求提供者这样做。
  • 成功了,谢谢

标签: javascript angular http angular2-http


【解决方案1】:

试试这个

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 谢谢大家,最终在 API 端没有正确设置 CORS。
    【解决方案3】:

    我不确定,但您可以尝试添加此标题:

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

    我在这个discussion找到它

    【讨论】:

      猜你喜欢
      • 2018-02-09
      • 2018-09-26
      • 1970-01-01
      • 2018-08-11
      • 2017-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多