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;

HttpClient client = new HttpClient();

Todo todo = new Todo() { Text = "text", Status = false };
int UserId = 10;

// Requete GET sans paramètre
HttpResponseMessage response = await client.GetAsync("http://localhost:5000/api/Todo/list/");

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

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

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

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

// Autre méthode (PUT et DELETE)
HttpResponseMessage response = await client.PutAsync($"api/Todo/create/");
HttpResponseMessage response = await client.DeleteAsync($"api/Todo/create/");
HttpResponseMessage response = await client.PutAsJsonAsync($"api/Todo/create/", todo);

Utiliser la réponse

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

// Prenons comme exemple la récéption d'une classe UserLogin
public class UserLogin
{
    public required string Name { get; set; }
    public required string Pass { get; set; }
}

// On emet notre requete
HttpResponseMessage response = await client.GetAsync("http://localhost:5000/api/User/login");

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

// 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();

Gestion des erreurs

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

try
{
    HttpResponseMessage response = await client.GetAsync("http://localhost:5000/api/User/login");
    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 :

client.DefaultRequestHeaders.Add("Authorization", "Bearer " + token);