27-3 Action Show du contrôleur d'API
Pour obtenir un événement, il nous faut une action d'API retournant cet événement.
Pour ce faire, on peut créer une nouvelle action dans le contrôleur d'API nommée Show
.
À noter que l'utilisation de Show
fait peut-être moins de sens à première vue que dans un projet MVC où l'action Show
du contrôleur retourne une vue du même nom. Cependant, on désir tout de même "montrer" un événement, seulement que ce sera sous forme de données JSON
.
Par souci de constance, on conservera la même nomenclature.
Créer l'action Show
/// <summary>
/// GET /api/evenements/id
/// Récupère un événement
/// </summary>
/// <param name="id">L'identifiant de l'événement</param>
/// <returns>L'événement demandé ou NotFound</returns>
[HttpGet("{id:int}")]
public async Task<IActionResult> Show(int id)
{
var evenement = await _evenementService.FindById(id);
if (evenement is null) return NotFound();
return Ok(_mapper.Map<EvenementDto>(evenement));
}
Cette fonction appelle une fonction déjà existante au niveau du service afin d'obtenir l'événement et on utilise finalement AutoMapper
pour retourner un EvenementDto
à partir du modèle Evenement
.
Tester via Scalar ou Postman
À l'aide d'un Id
d'événement valide, effectuez une requête GET
vers api/evenements/{id}
:

À noter que dans Scalar
vous pouvez préciser l'identifiant pour la requête dans la section Variables
de la requête.
Vous devriez recevoir le détail d'un événement.
Récupérer l'événement demandé à partir de l'application client
Maintenant que l'API peut retourner un événement au format JSON, il devrait être possible de le récupérer via le l'application client.
Modifier la page Show
du projet Admin
On doit premièrement éditer la page Show
pour lui ajouter une référence à un objet EvenementDto
puisque c'est ce qu'on recevra en provenance de l'API.
On en profitera aussi pour ajouter la coquille de la fonction OnInitializedAsync()
qui permettra de faire l'appel au service (API).
- Ajouter EvenementDto afin de contenir le retour de l'API
Snowfall.Web.Admin/Pages/Evenements/Show.razor
@page "/evenements/{Id:int}"
@using Snowfall.Application.Dtos.Evenements
<h3>Show</h3>
@code {
[Parameter]
public int Id { get; set; }
private EvenementDto? _evenementDto;
} - Ajouter la fonction
OnInitializedAsync
Snowfall.Web.Admin/Pages/Evenements/Show.razor@code {
[Parameter]
public int Id { get; set; }
private EvenementDto? _evenementDto;
protected override async Task OnInitializedAsync()
{
// Récupérer l'événement via le service / l'API
}
}
Ajouter une fonction ObtenirEvenement
à EvenementHttpClient
Pour que la page Show
puisse récupérer l'événement, elle doit appeler le client afin que ce dernier communique avec l'API.
Dans la classe EvenementHttpClient
, ajoutez une fonction ObtenirEvenement
pour récupérer un événement individuel par son id
.
//...
public async Task<EvenementDto?> ObtenirEvenement(int id)
{
string url = $"{BaseApiUrl}/{id}";
return await _client.GetFromJsonAsync<EvenementDto>(url);
}
//...
Appeler ObtenirEvenement
dans la page Show
Il ne reste qu'à faire l'appel au HttpClient
et d'afficher un minimum d'information.
- Injectez dans la page le client HTTP
Snowfall.Web.Admin/Pages/Evenements/Show.razor
@page "/evenements/{Id:int}"
@using Snowfall.Application.Dtos.Evenements
@using Snowfall.Web.Admin.HttpClients
@inject EvenementHttpClient EvenementHttpClient - Faire l'appel au client pour récupérer l'événement
Snowfall.Web.Admin/Pages/Evenements/Show.razor
protected override async Task OnInitializedAsync()
{
_evenementDto = await EvenementHttpClient.ObtenirEvenement(Id);
} - Afficher un minimum d'information
Snowfall.Web.Admin/Pages/Evenements/Show.razor
@page "/evenements/{Id:int}"
@using Snowfall.Application.Dtos.Evenements
@using Snowfall.Web.Admin.HttpClients
@inject EvenementHttpClient EvenementHttpClient
@if (_evenementDto == null)
{
<p>Chargement...</p>
}
else
{
<h1>@_evenementDto.Nom</h1>
}
//...
Test
Si vous testez l'application, le titre du jeu devrait être affiché sur la page!
