2016-08-09 20 views
2

Angular 2-Post-Anforderung, die diesen Fehler anzeigt.Fehler beim Senden von Post in Angular 2

do_login(username: string,password: string): Observable<string> { 
    let body = JSON.stringify({"username":username,"password":password}); 
    let headers = new Headers({ 'Content-Type': 'application/json' }); 
    let options = new RequestOptions({ headers: headers }); 

    return this.http.post(this.loginUrl, body, options) 
      .map((response) => { 
      return response.json(); 
      } 
    ); 
} 

Anfrage erhalten funktioniert gut. und POST-URL funktioniert gut, wenn sie auf REST-Client aufrufen

enter image description here

Was in meinem Code fehlt. Danke für deine Hilfe.

Antwort

1

Es ist wegen CORS. Preflight-Anforderungen werden auf der Serverseite nicht behandelt. Dies ist, was der 405-Statuscode sagt:

405 Methode nicht erlaubt Eine Anforderung Methode ist nicht für die angeforderte Ressource unterstützt; B. eine GET-Anforderung für ein Formular, für das Daten über POST bereitgestellt werden müssen, oder eine PUT-Anforderung für eine schreibgeschützte Ressource.

Es funktioniert für GET-Methoden, weil Sie im Falle von einfachen Anfragen, nicht Preflight sind. Es ist normalerweise ein serverseitiges Problem, kein Frontend/Angular2.

Diese Artikel könnten Ihnen helfen, zu verstehen, was passiert:

1

CORS beteiligt ist, da es eine OPTIONS Anforderung, die die POST Anfrage vorausgeht.

Der Server gibt keine gültige Antwort auf die Anforderung OPTIONS aus - was den oben aufgeführten Fehler zur Folge hat. Sie müssen die CORS-Konfiguration Ihres Servers untersuchen, da dort das Problem liegt - nicht im obigen Code.

Wenn die GET ist in Ordnung arbeiten, sollten Sie bei der Access-Control-Allow-Methods Konfiguration aussehen