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);
}