2017-07-07 68 views
1

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

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或邮差尝试打电话时,或者在招摇时,同样的道理,我会得到结果。 所以第一因子评分,标题是不正确的,但是当我登录的选项,我得到:

{"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."} 

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

+0

什么是您传递的令牌的格式? – Aniket

+0

基本64,我猜 – fangio

+0

想知道你传递的令牌的示例格式 – Aniket

回答

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() 
} 
+0

我的问题中的第二个代码块是我的RequestOptions,这些对我而言是正确的。 – fangio

+0

如果在您的服务中正确输入了所有内容,TypeScript应该突出显示可能的错误。以防万一在Angular文档中检查[RequestOptionsArgs](https://angular.io/api/http/RequestOptionsArgs)。 –

+0

如何将标题检查更改为不区分大小写?或者标题不要在Angular中小写? – fangio

-1

你能告诉我们CentralService? 此外,你可能想避免在构造函数中调用它,而是实现OnInit