Angular 4 GET 403响应

时间:2017-07-07 09:07:14

标签: django angular api get authorization

我在Angular 4中编写了一个调用REST API(DJANGO)的应用程序。 代码如下:

export class ForecastUnitService {

private path = 'forecastunit/';
private options;
constructor (private http: Http, private c:CentralService) {
this.options=this.c.createOptions();
}

getForecastUnits(): Observable<ForecastUnit[]> {
return this.http.get(this.c.createURL(this.path),this.options)
  .map(this.extractData)
  .catch(this.handleError);
}
...
}

我添加了包含授权标头的选项,但我仍然可以 403被禁止。然而,当我尝试使用cUrl或Postman或swagger进行调用时,我会得到相同的结果。 首先,标题不正确,但是当我记录选项时,我得到:

{"method":null,"headers":{"Authorization":["**Correct Token**"],"Content-Type":["application/json"]},"body":null,"url":null,"withCredentials":null,"responseType":null}

所以这不是问题,当我查看Chrome的回复时,我会看到以下内容:

{"detail":"Authentication credentials were not provided."}

所以再没有凭据,但我真的通过了它们,出了什么问题?

2 个答案:

答案 0 :(得分:1)

Angular的http模块将所有标题名称更改为小写。这可能是一个问题,因为某些API服务不遵循规范,并且当它们不区分大小写时,它们的标头检查区分大小写。

检查API的配置。

我认为您的CentralService会创建有效的选项。

interface RequestOptionsArgs { 
  url: string|null
  method: string|RequestMethod|null
  search: string|URLSearchParams|{[key: string]: any | any[]}|null
  params: string|URLSearchParams|{[key: string]: any | any[]}|null
  headers: Headers|null
  body: any
  withCredentials: boolean|null
  responseType: ResponseContentType|null
}

接头:

class Headers {
  static fromResponseHeaderString(headersString: string): Headers
  constructor(headers?: Headers|{[name: string]: any}|null)
  append(name: string, value: string): void
  delete(name: string): void
  forEach(fn: (values: string[], name: string|undefined, headers: Map<string, string[]>) => void): void
  get(name: string): string|null
  has(name: string): boolean
  keys(): string[]
  set(name: string, value: string|string[]): void
  values(): string[][]
  toJSON(): {[name: string]: any}
  getAll(name: string): string[]|null
  entries()
}

答案 1 :(得分:-1)

你能告诉我们CentralService吗? 您也可以避免在构造函数中调用它,而是实现OnInit