2017-04-23 2 views
0

Ich habe dieses Problem mit benutzerdefinierten Headern bei dem Versuch, und Http GET-Anfrage von eckigen 2 laufen. Preforming die gleiche Anfrage von Postman funktioniert gut, aber ich bekomme einen folgenden Fehler 405 in Angular2:Angular 2 Http mit benutzerdefinierten Headern bekommen 405

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

die API verfügt über eine GET-Operation in dem Sie einen Benutzername und Passwort in der Kopfzeile übergeben, und es gibt ein 200 mit einem Token in dem Header ist. Hier ist ein Beispiel des Codeblocks ich verwende:

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; 
    }); 
} 

Wie ich bereits erwähnt, diese Anforderung in Postman Durchführung und er WebStorm REST-Client mit diesen Header funktioniert gut. Wenn ich diese "X-Rem" -Kopfzeilen entferne, bekomme ich eine 401, was erwartet wird. Jede Hilfe wäre dankbar, danke.

+0

hinzufügen 'X-Rem-Username' und' X-Rem-password' auf Ihre CORS-Response-Header [ 'Access-Control-Allow-Headers'] (https: // Entwickler .mozilla.org/de-DE/docs/Web/HTTP/Header/Zugriffskontrolle-Erlaube-Header) .. vorausgesetzt, Sie haben CORS bereits auf Ihrem Server installiert. –

+0

Hallo, ich werde den Anbieter bitten, dies zu tun. – Joofville

+0

Das hat den Trick, danke – Joofville

Antwort

0

Dies ist kein Problem mit Winkel App. Ihre App und der Rest-API-Server sind unterschiedliche Server/Domänen. Sie sollten die domainübergreifenden Zugriffsrechte auf dem Server konfigurieren. Wann immer Sie einen API-Server über einen Webbrowser anfordern, prüfen Sie zunächst die Optionen für die domänenübergreifenden Zulassungen, indem Sie eine Methode OPTION anfordern. In postman api direkt senden, gibt es keine Cross-Domain.

+0

Danke Jungs, am Ende wurde CORS nicht richtig auf der API-Seite eingerichtet. – Joofville

0

Ich bin nicht sicher, aber Sie können diesen Header versuchen hinzufügen:

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

Ich fand es in diesem discussion

1

Versuchen Sie, diese

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

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