0

Je suis deux projets de travail liés les uns aux autres A et B. par exempleangulaire 2 + API Web - Les données post ne fonctionne pas

dans le projet A - J'ai mis Entity Framework pour extraire des données de base de données.

Dans le projet B - J'ai implémenté Angular 2, récupérant les données du projet A et les affichant à l'écran (client).

Les deux projets sont connectés à l'API. L'API du projet B appelle l'API du projet A pour extraire les données de la base de données et les afficher à l'écran (client). pour récupérer les données 'GET' La requête fonctionne correctement. Problème: Lorsque l'utilisateur remplit un formulaire et publie des données, la méthode 'POST' ne fonctionne pas. Si j'implémente la même méthode [HttpPost] dans le projet B, alors cela fonctionne, mais je veux publier des données dans la méthode du projet B.

Pour comprendre plus facilement, je l'ai essayé de mettre en œuvre cette situation graphique ci-dessous: (en surbrillance rouge partie ne fonctionne pas)

enter image description here

Affichage des données avec angulaire 2 fonctionne très bien comme ci-dessous:

return this.http 
     .post(projectAUrl, JSON.stringify({ stateName: stateName }), { headers: this.headers }) 
     .toPromise() 
     .then(res => res.json().data as AnalyticsState) 

[HttpPost] Procédé Project contrôleur de A est mis en oeuvre ci-dessous:

[Route("api/States")] 
[HttpPost] 
public IHttpActionResult PostSaveState([FromBody]string stateName) 
{ 
    return null; 
} 

Après avoir soumis la forme, cette méthode ne déclenche pas (essayé en mettant point d'arrêt) dans le projet A, même méthode fonctionne si je mets en œuvre dans le projet B.

Dois-je faire quelque chose avec l'API à la fois projet l'affichage de données ou il me manque quelque chose de stupide point de parvenir à l'affichage des données dans la base de données? Nouveau sur dotNet core et angulaire 2, essaie de comprendre le déroulement du projet.

Remarque: Je ne souhaite pas implémenter l'infrastructure d'entité dans le projet B. Le flux de projet doit être identique à celui de l'image jointe.

Jusqu'à présent, j'essayé beaucoup de choses, mais pas de chance, peu de liens sont:

httpclient call to webapi to post data not working

.NET MVC 4 WebAPI POST not working

https://angular.io/docs/ts/latest/tutorial/toh-pt6.html

travail: Ci-dessous la fonction angulaire pour l'extraction de données à partir du projet A fonctionne bien.

getStates() { 

    let ProjectAUrl = 'http://localhost:9043/api/GetStates'; 

    return this.http.get(ProjectAUrl) 
     .map(res=>res.json() 
     .subscribe(States => this.States = States); 
} 

ne fonctionne pas: Lorsque la soumission formulaire utilisateur, j'appelle ci-dessous fonction angulaire. Dans la fonction ci-dessous, si j'utilise ProjectBUrl, le contrôle va dans la méthode du contrôleur du projet B (que je ne veux pas). Mais si j'utilise ProjectAUrl, le contrôle ne va pas au contrôleur du projet A.

SaveState(stateName: string): Promise<State> { 

    let ProjectAUrl = 'http://localhost:9043/api/States?stateName='+stateName+''; 
    let ProjectBUrl = 'api/States?stateName='+stateName+''; 

    return this.http 
     .post(ProjectAUrl , JSON.stringify({ stateName: stateName }), { headers: this.headers }) 
     .toPromise() 
     .then(res => res.json().data as State) 
     .catch(this.handleError); 
} 

Alors est-il possible d'appeler la méthode du contrôleur du projet A directement à partir de la fonction angulaire du projet B? ou passez un contrôle de la fonction angulaire au contrôleur du projet B, puis appelez le contrôleur du projet A à partir du contrôleur du projet B.

Désolé de le rendre un peu confus et compliqué! mais toute aide serait très appréciée.

Une idée de comment publier des données via l'API dans Angular 2?

+0

Vous publiez un objet, mais vous attendez d'une chaîne un paramètre de l'API. Aussi, theres pas besoin de stringfy – Fals

+0

'la même méthode fonctionne si j'implémente dans le projet B. Voulez-vous dire que certaines méthodes vont de B à A, mais angulaire accède parfois directement à A directement? Il semble qu'Angular connaisse les deux API. – Win

+0

Bonjour @Win, merci pour votre réponse. J'ai mis à jour ma question avec une implémentation plus détaillée de la fonction angulaire 2 de récupération et de publication des données. J'appelle le Projet A en appelant simplement url. – Riddhi

Répondre

-1
  • Supprimez l'attribut FromBody de votre paramètre d'action du contrôleur
  • Faire le paramètre de chaîne à votre action du contrôleur Route attribut Route ("api/États/stateName/{stateName}")
  • Appel à poste client devrait include stateName sur l'URL
+0

S'il le fait, il passera le paramètre à l'URI ou à l'intérieur du corps. – Fals

+0

Correct, dernière balle mise à jour. – dudeNumber4