Estoy tratando de hacer una solicitud POST pero no puedo hacer que funcione:
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()));
});
}
Básicamente, quiero replicar esta solicitud http (no ajax) como si se originara en un formulario html:
URL: / api
Parámetros: nombre de usuario y contraseña
typescript
angular
Christopher
fuente
fuente
user_name
ypassword
, stackoverflow.com/a/45879409/2803344Respuestas:
Creo que el cuerpo no es correcto para un
application/x-www-form-urlencoded
tipo de contenido. Podrías intentar usar esto:Espero que te ayude, Thierry
fuente
import { URLSearchParams } from "@angular/http"
y no el predeterminado, por lo que 1) no necesita hacerlo.toString
, y 2) no necesita establecer el tipo de contenido. Angular lo inferirá automáticamente por usted (consulte github.com/angular/angular/blob/4.4.4/packages/http/src/… )Actualización para Angualar 4.3+
Ahora podemos usar en
HttpClient
lugar deHttp
La guía está aquí
Código de muestra
Obsoleto
O puedes hacer esto:
Actualización Oct / 2017
Desde angular4 + , no necesitamos
headers
, ni.toString()
cosas. En su lugar, puede hacer como el siguiente ejemploMétodo POST / PUT
Método GET / DELETE
Para el tipo de
application/json
contenido JSONfuente
import { URLSearchParams } from "angular2/http"
En versiones posteriores de Angular2, no es necesario configurar manualmente el
Content-Type
encabezado y codificar el cuerpo si pasa un objeto del tipo correcto comobody
.Simplemente puedes hacer esto
De esta manera, angular codificará el cuerpo por usted y establecerá el
Content-Type
encabezado correcto .PD: no olvides importar
URLSearchParams
desde@angular/http
o no funcionará.fuente
FormData
, y angulares configuraráContent-Type
comomultipart/form-data
que también el trabajo.así que solo para que sea una respuesta completa:
fuente
Todas estas respuestas están desactualizadas para aquellos que utilizan HttpClient en lugar de Http. Estaba empezando a volverme loco pensando, "¡He importado URLSearchParams pero todavía no funciona sin .toString () y el encabezado explícito!"
Con HttpClient, use HttpParams en lugar de URLSearchParams y observe la
body = body.append()
sintaxis para lograr múltiples parámetros en el cuerpo, ya que estamos trabajando con un objeto inmutable:fuente
Si alguien está luchando con la versión angular 4+ (la mía era 4.3.6) . Este fue el código de muestra que funcionó para mí.
Primero agregue las importaciones requeridas
Luego, para la función api. Es una muestra de inicio de sesión que se puede cambiar según sus necesidades.
fuente
Tenía problemas con cada enfoque que usaba múltiples parámetros, pero funciona bastante bien con un solo objeto
api:
angular:
fuente
fuente
Aterricé aquí cuando intentaba hacer algo similar. Para un tipo de contenido application / x-www-form-urlencoded, puede intentar usar esto para el cuerpo:
con lo que intentaste hacer, el valor asignado a body será una cadena.
fuente