1 pièce(s) jointe(s)
Recuperer des Auteurs via une Application MVC et une application Console ConsommerAPI
Bonjour,
J'ai crée un projet Asp.MVC nomme e_bibliotheque(bibliotheque de classes)
La classe AuteurController contient une methode AfficherAuteurs, qui, pour s'executer, fait appel à un une instance serviceAuteur de la classe ServiceAuteur, d'une application console ConsommerAPI
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
|
using ConsommerAPI;
using e_Bibliotheque.Models;
using Entite;
using System;
using System.Threading.Tasks;
using System.Web.Mvc;
namespace e_Bibliotheque.Controllers
{
[RoutePrefix("api/Auteur")]
public class AuteurController : Controller
{
[Route("")]
// GET: Auteur
[HttpGet]
public async Task<ActionResult>AfficherAuteurs()
{
VM_ListAuteurs modelAuteurs = new VM_ListAuteurs();
modelAuteurs.ListAuteurs = null;
try
{
ServiceAuteur serviceAuteur = new ServiceAuteur();
//les modèles récupèrent les resultats recupérés + la vue les affiche
modelAuteurs.ListAuteurs = await serviceAuteur.recupLesAuteursAsync();
return View(modelAuteurs);
}
catch(Exception ex)
{
Console.WriteLine("une erreur s'est produite" + ex.Message);
return View(modelAuteurs);
}
} |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
|
namespace ConsommerAPI
{
public class ServiceAuteur
{
public async Task<IEnumerable<Auteur>> recupLesAuteursAsync()
{
HttpClient client = new HttpClient();
client.BaseAddress = new Uri("https://localhost:59543/api/");
var urlAPI = client.BaseAddress;
var objetReponse = await client.GetAsync($"{urlAPI}Auteur");
if (objetReponse.StatusCode == System.Net.HttpStatusCode.OK)
{
var objetContenu = objetReponse.Content;
var stringContenu = await objetContenu.ReadAsStringAsync();
var listAuteur = JsonConvert.DeserializeObject<IEnumerable<Auteur>>(stringContenu);
return listAuteur;
}
else if (objetReponse.StatusCode == System.Net.HttpStatusCode.NotFound)
{
return null;
}
else
{
var objetContenu = objetReponse.Content;
var stringContenu = await objetContenu.ReadAsStringAsync();
throw new Exception("Un problème avec API : status = {objetReponse.StatusCode}, contenu : {stringContenu}");
}
} |
La méthode GetAsync permet-elle de recuperer les données stockées uniquement sur un serveur ou eventuellement dans un IEnumerable<Auteur>.
Si elle ne permet de recuperer que des infos sur un serveur, il faudrait donc que consommerAPI soit en communication avec le ServeurAPI.(cela fait 5 ans que j'ai commencé ce projet que je reprends aujourd'hui)
Est ce bien cela ?
Autre question, en haut de la classe AuteurController il y a [RoutePrefix("api/Auteur")].
Ceci signifie que mon controller est de la forme api/nomcontroller
Or ce n'est pas ce qui est dans le fichier RouteConfig.cs.
Je n'ai donc pas forcément besoin de mentionner [RoutePrefix("api/Auteur")] en haut de la classe.Merci beaucoup de confirmer.
Merci beaucoup de bien vouloir m'aider à resoudre
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
namespace e_Bibliotheque
{
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Accueil", action = "Accueil", id = UrlParameter.Optional }
);
}
}
} |
Pour l'instant j'ai cette erreur d'execution(voir fichier joint)
Merci beaucoup de votre aide encore pour que j'y voie plus clair depuis tout ce temps.
Bien cordialement.
new_wave