web-dev-qa-db-fra.com

Angulaire 4 Http POST ne fonctionne pas

J'espère que tout le monde va bien. J'ai récemment commencé à travailler avec Angular 4.4. J'essayais de publier des données sur mon serveur api, mais malheureusement, cela ne fonctionne pas. J'ai passé 2 jours à ce sujet, mais toujours sans succès. Et ont déjà essayé 6-7 article même de angular.io . J'ai essayé les deux Http et Httpclient modules Mais rien ne semble fonctionner.

Le problème est que, chaque fois que j'essaye de poster des données sur mon serveur, Angular fait une demande de type http OPTIONS au lieu de POST.

this.http.post('http://myapiserver.com', {email: '[email protected]'}).subscribe(
    res => {
        const response = res.text();
    }
);

Et j'ai également essayé d'envoyer des options personnalisées avec la demande, mais toujours sans succès.

const headers = new Headers({ 'Content-Type': 'x-www-form-urlencoded' });
const options = new RequestOptions({ headers: headers });
options.method = RequestMethod.Post;
options.body = {name: 'Adam Smith'};
//options.body = JSON.stringify({name: 'Adam Smith'}); // i also tried this
//options.body = 'param1=something&param2=somethingelse'; // i also tried this

J'utilisais ASP.NET core 2.0, mais comme cela ne fonctionnait pas, j'ai aussi essayé du code php simple, voici le code côté serveur pour php. Et ça ne marche pas non plus.

<?php
print_r($_POST);
?>

Remarque: Cors sont également activés sur le serveur. De plus, j’ai aussi essayé d’obtenir une simple requête get et cela fonctionne parfaitement.

Je vais vraiment apprécier une aide.

Merci d'avance

4
Osama Sheikh

Je l'ai résolu en définissant le type de contenu sur application/x-www-form-urlencoded:

  const headers = new Headers({ 'Content-Type': 'application/x-www-form-urlencoded' });
  const options = new RequestOptions({ headers: headers });
  const params = new URLSearchParams();
  params.append('mypostField', 'myFieldValue');
  http.post('myapiendpoint.com', params, options).subscribe();
5
Osama Sheikh

avez-vous essayé de passer des en-têtes comme troisième argument de la méthode post:

this.http.post('http://myapiserver.com', JSON.stringify({name: 'Adam Smith'}), { headers: new Headers({ 'Content-Type': 'application/json' }) }).subscribe(
    res => {
        const response = res.text();
    }
);

assurez-vous d'importer les en-têtes de @ angular/http

1
JayDeeEss

J'ai eu le même problème et je l'ai utilisé comme ceci. Ça marche pour moi.

let formdata = new FormData();
formdata.append('email', '[email protected]');

this.http.post('http://myapiserver.com', formdata).subscribe(
    res => {
        const response = res.text();
    }
);
0
Reshan Pubudu