headers example typescript angular

typescript - example - Angular2: parámetros de solicitud Http POST



post angular 2 (8)

Actualización para Angualar 4.3+

Ahora podemos usar HttpClient lugar de Http

La guía está here

Código de muestra

const myheader = new HttpHeaders().set(''Content-Type'', ''application/x-www-form-urlencoded'') let body = new HttpParams(); body = body.set(''username'', USERNAME); body = body.set(''password'', PASSWORD); http .post(''/api'', body, { headers: myheader), }) .subscribe();

Obsoleto

O puedes hacer así:

let urlSearchParams = new URLSearchParams(); urlSearchParams.append(''username'', username); urlSearchParams.append(''password'', password); let body = urlSearchParams.toString()

Actualización octubre / 2017

Desde angular4 + , no necesitamos headers o .toString() . En cambio, puedes hacer como el siguiente ejemplo

import { URLSearchParams } from ''@angular/http'';

Método POST / PUT

let urlSearchParams = new URLSearchParams(); urlSearchParams.append(''username'', username); urlSearchParams.append(''password'', password); this.http.post(''/api'', urlSearchParams).subscribe( data => { alert(''ok''); }, error => { console.log(JSON.stringify(error.json())); } )

Método GET / DELETE

let urlSearchParams = new URLSearchParams(); urlSearchParams.append(''username'', username); urlSearchParams.append(''password'', password); this.http.get(''/api'', { search: urlSearchParams }).subscribe( data => { alert(''ok''); }, error => { console.log(JSON.stringify(error.json())); } )

Para la application/json JSON application/json Content-Type

this.http.post(''/api'', JSON.stringify({ username: username, password: password, })).subscribe( data => { alert(''ok''); }, error => { console.log(JSON.stringify(error.json())); } )

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 fuera originada por un formulario html:

URL: / api

Parámetros: nombre de usuario y contraseña


Aterricé aquí cuando intentaba hacer algo similar. Para un tipo de contenido de aplicación / x-www-form-urlencoded, puede intentar usar esto para el cuerpo:

var body = ''username'' =myusername & ''password''=mypassword;

con lo que intentó hacer, el valor asignado al cuerpo será una cadena.


Creo que el cuerpo no es correcto para un tipo de contenido de application/x-www-form-urlencoded . Podrías intentar usar esto:

var body = ''username=myusername&password=mypassword'';

Espero que te ayude, Thierry


En versiones posteriores de Angular2, no es necesario configurar manualmente el encabezado Content-Type y codificar el cuerpo si pasa un objeto del tipo correcto como body .

Simplemente puedes hacer esto

import { URLSearchParams } from "@angular/http" testRequest() { let data = new URLSearchParams(); data.append(''username'', username); data.append(''password'', password); this.http .post(''/api'', data) .subscribe(data => { alert(''ok''); }, error => { console.log(error.json()); }); }

De esta manera, angular codificará el cuerpo por usted y establecerá el encabezado de Content-Type correcto.

PD: No olvide importar URLSearchParams desde @angular/http o no funcionará.


Estaba teniendo problemas con cada enfoque que usa múltiples parámetros, pero funciona bastante bien con un solo objeto

api:

[HttpPut] [Route("addfeeratevalue")] public object AddFeeRateValue(MyValeObject val)

angular:

var o = {ID:rateId, AMOUNT_TO: amountTo, VALUE: value}; return this.http.put(''/api/ctrl/mymethod'', JSON.stringify(o), this.getPutHeaders()); private getPutHeaders(){ let headers = new Headers(); headers.append(''Content-Type'', ''application/json''); return new RequestOptions({ headers: headers , withCredentials: true // optional when using windows auth }); }


Estas respuestas están desactualizadas para aquellos que utilizan el HttpClient en lugar de Http. Estaba empezando a volverme loco pensando: "He hecho la importación de URLSearchParams pero todavía no funciona sin .toString () y el encabezado explícito".

Con HttpClient, use HttpParams en lugar de URLSearchParams y observe la sintaxis body = body.append() para lograr múltiples parámetros en el cuerpo ya que estamos trabajando con un objeto inmutable:

login(userName: string, password: string): Promise<boolean> { if (!userName || !password) { return Promise.resolve(false); } let body: HttpParams = new HttpParams(); body = body.append(''grant_type'', ''password''); body = body.append(''username'', userName); body = body.append(''password'', password); return this.http.post(this.url, body) .map(res => { if (res) { return true; } return false; }) .toPromise(); }


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

import { Http, Headers, Response, URLSearchParams } from ''@angular/http'';

Luego para la función api. Es una muestra de inicio de sesión que se puede cambiar según sus necesidades.

login(username: string, password: string) { var headers = new Headers(); headers.append(''Content-Type'', ''application/x-www-form-urlencoded''); let urlSearchParams = new URLSearchParams(); urlSearchParams.append(''email'', username); urlSearchParams.append(''password'', password); let body = urlSearchParams.toString() return this.http.post(''http://localhost:3000/api/v1/login'', body, {headers: headers}) .map((response: Response) => { // login successful if user.status = success in the response let user = response.json(); console.log(user.status) if (user && "success" == user.status) { // store user details and jwt token in local storage to keep user logged in between page refreshes localStorage.setItem(''currentUser'', JSON.stringify(user.data)); } }); }


así que para que sea una respuesta completa:

login(username, password) { var headers = new Headers(); headers.append(''Content-Type'', ''application/x-www-form-urlencoded''); let urlSearchParams = new URLSearchParams(); urlSearchParams.append(''username'', username); urlSearchParams.append(''password'', password); let body = urlSearchParams.toString() return this.http.post(''http://localHost:3000/users/login'', body, {headers:headers}) .map((response: Response) => { // login successful if there''s a jwt token in the response console.log(response); var body = response.json(); console.log(body); if (body.response){ let user = response.json(); if (user && user.token) { // store user details and jwt token in local storage to keep user logged in between page refreshes localStorage.setItem(''currentUser'', JSON.stringify(user)); } } else{ return body; } }); }