Ich versuche eine POST-Anfrage zu stellen, aber ich kann sie nicht zum Laufen bringen:
testRequest() {
var body = 'username=myusername?password=mypassword';
var headers = new Headers();
headers.append('Content-Type', 'application/x-www-form-urlencoded');
this.http
.post('/api',
body, {
headers: headers
})
.subscribe(data => {
alert('ok');
}, error => {
console.log(JSON.stringify(error.json()));
});
}
Grundsätzlich möchte ich diese http-Anfrage (nicht Ajax) so replizieren, als ob sie von einem HTML-Formular stammt:
URL: / api
Parameter: Benutzername und Passwort
typescript
angular
Christopher
quelle
quelle
user_name
undpassword
, stackoverflow.com/a/45879409/2803344Antworten:
Ich denke, dass der Körper für einen
application/x-www-form-urlencoded
Inhaltstyp nicht korrekt ist . Sie könnten versuchen, dies zu verwenden:Hoffe es hilft dir, Thierry
quelle
import { URLSearchParams } from "@angular/http"
nicht der Standard ist, und 1) Sie müssen dies nicht tun.toString
, und 2) Sie müssen den Inhaltstyp nicht festlegen. Angular wird es automatisch für Sie ableiten (siehe github.com/angular/angular/blob/4.4.4/packages/http/src/… )Update für Angualar 4.3+
Jetzt können wir
HttpClient
statt verwendenHttp
Führer ist hier
Beispielcode
Veraltet
Oder Sie können so tun:
Update Okt / 2017
Von angular4 + , brauchen wir nicht
headers
, oder.toString()
stopft. Stattdessen können Sie wie im folgenden Beispiel vorgehenPOST / PUT-Methode
GET / DELETE-Methode
Für JSON-
application/json
Inhaltstypquelle
import { URLSearchParams } from "angular2/http"
In späteren Versionen von Angular2 ist es nicht erforderlich, den
Content-Type
Header manuell festzulegen und den Body zu codieren, wenn Sie ein Objekt des richtigen Typs als übergebenbody
.Sie können dies einfach tun
Auf diese Weise codiert eckig den Körper für Sie und setzt den richtigen
Content-Type
Header.PS Vergessen Sie nicht importieren
URLSearchParams
aus@angular/http
oder es wird nicht funktionieren.quelle
FormData
, und der Winkel wird so eingestelltContent-Type
,multipart/form-data
dass er auch funktioniert.Nur um eine vollständige Antwort zu erhalten:
quelle
Diese Antworten sind alle veraltet, wenn Sie den HttpClient anstelle von Http verwenden. Ich fing an verrückt zu werden und dachte: "Ich habe den Import von URLSearchParams durchgeführt, aber es funktioniert immer noch nicht ohne .toString () und den expliziten Header!"
Verwenden Sie mit HttpClient HttpParams anstelle von URLSearchParams und beachten Sie die
body = body.append()
Syntax, um mehrere Parameter im Body zu erreichen, da wir mit einem unveränderlichen Objekt arbeiten:quelle
Wenn jemand mit der eckigen Version 4+ zu kämpfen hat (meine war 4.3.6) . Dies war der Beispielcode, der für mich funktioniert hat.
Fügen Sie zuerst die erforderlichen Importe hinzu
Dann für die API-Funktion. Es ist ein Anmeldebeispiel, das je nach Bedarf geändert werden kann.
quelle
Ich hatte Probleme bei jedem Ansatz mit mehreren Parametern, aber es funktioniert ziemlich gut mit einem einzelnen Objekt
api:
eckig:
quelle
quelle
Ich bin hier gelandet, als ich versucht habe, etwas Ähnliches zu tun. Für einen Inhaltstyp application / x-www-form-urlencoded können Sie versuchen, diesen für den Body zu verwenden:
Bei dem, was Sie versucht haben, wird der dem Körper zugewiesene Wert eine Zeichenfolge sein.
quelle