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 : Sélectionner tout - Visualiser dans une fenêtre à part
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); } }La méthode GetAsync permet-elle de recuperer les données stockées uniquement sur un serveur ou eventuellement dans un IEnumerable<Auteur>.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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}"); } }
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
Pour l'instant j'ai cette erreur d'execution(voir fichier joint)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 } ); } } }
Merci beaucoup de votre aide encore pour que j'y voie plus clair depuis tout ce temps.
Bien cordialement.
new_wave
Partager