Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Requête HTTP

Pour faire communiquer nos services, on utilise des requêtes HTTP.

Emmetre des requêtes HTTP

Voici quelques exemples de requêtes.

using System.Net.Http.Json;

HttpClient client = new HttpClient();
client.BaseAddress = new Uri("http://localhost:5000/");

var todo = new { Text = "text", Status = false };
int UserId = 10;

// Requete GET sans paramètre
HttpResponseMessage listResponse = await client.GetAsync("api/Todo/list/");

// Requete GET avec paramètre
HttpResponseMessage userListResponse = await client.GetAsync($"api/Todo/list/{UserId}");

// Requete POST avec donnée
HttpResponseMessage createResponse = await client.PostAsJsonAsync("api/Todo/create/", todo);

// Requete POST avec paramètre et donnée
HttpResponseMessage userCreateResponse = await client.PostAsJsonAsync($"api/Todo/create/{UserId}", todo);

// Requete POST avec paramètre et sans donnée
HttpResponseMessage emptyPostResponse = await client.PostAsync($"api/Todo/create/{UserId}", null);

// Autre méthode (PUT et DELETE)
HttpResponseMessage putResponse = await client.PutAsJsonAsync("api/Todo/update/", todo);
HttpResponseMessage deleteResponse = await client.DeleteAsync("api/Todo/delete/");

Utiliser la réponse

On sait comment envoyer une requêtes, maintenant récupéront sont résultat.

// On emet notre requete
HttpResponseMessage response = await client.PostAsJsonAsync("api/User/Login", new
{
    Username = "Alice",
    Password = "Secret123!"
});
response.EnsureSuccessStatusCode();

// On recupere le résultat et on le transforme en une instance de LoginResponse
LoginResponse? login = await response.Content.ReadFromJsonAsync<LoginResponse>();

// Si l'on veux récuperer le texte renvoyé et ne pas le convertir en instance d'une classe on le fait de la manière suivante
string str = await response.Content.ReadAsStringAsync();

// La route Login renvoie un token et un utilisateur public.
public class LoginResponse
{
    public required string Token { get; set; }
    public required UserPublic User { get; set; }
}

Gestion des erreurs

Pour gérer les erreurs, on peut utiliser les exceptions.

try
{
    HttpResponseMessage response = await client.PostAsJsonAsync("api/User/Login", new
    {
        Username = "Alice",
        Password = "Secret123!"
    });
    response.EnsureSuccessStatusCode(); // Lève une exception si le code de retour n'est pas entre 200-299
}
catch (HttpRequestException e)
{
    Console.WriteLine($"Message : {e.Message}");
}

Headers

Pour ajouter des headers à une requête, on utilise la propriété DefaultRequestHeaders de HttpClient.

Par exemple pour ajouter un token JWT à une requête :

if (login is not null)
{
    client.DefaultRequestHeaders.Authorization =
        new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", login.Token);
}