291 votes

Comment définir un cookie sur HttpRequestMessage de HttpClient

Je suis en train d'essayer d'utiliser HttpClient de l'API web pour faire un post vers un point de terminaison qui nécessite une connexion sous forme d'un cookie HTTP qui identifie un compte (c'est quelque chose qui est seulement #ifdefé dans la version finale).

Comment ajouter un cookie à HttpRequestMessage ?

0voto

Si vous souhaitez utiliser HttpClient pour envoyer une requête qui nécessite que l'utilisateur soit connecté, cela signifie que vous devez effectuer le processus de connexion, puis recevoir les cookies et les envoyer à la requête qui nécessite une connexion.

J'ai fait cela en testant une Action appelée IsLoggedIn. Cette action vérifie si l'utilisateur est connecté en utilisant les cookies dans la requête HttpRequest.

Ce que j'ai fait pour tester cette action est le suivant :

string Login = JsonConvert.SerializeObject(new LoginViewModel()
{
    Email = userFromDb.Email,
    Password = "****",
    RememberMe = false
}); ;
StringContent LoginhttpContent = new(Login, Encoding.UTF8, "application/json");
var Login_response = await _httpClient.PostAsync(
    HelperFunctions.getUrl(HelperFunctions.AcctounController.name, HelperFunctions.AcctounController.Login),
    LoginhttpContent);
Assert.Equal(HttpStatusCode.OK, Login_response.StatusCode);

//recevoir les cookies de la réponse de connexion
var cookies = Login_response.Headers.GetValues(HeaderNames.SetCookie);
//Ajouter les cookies aux DefaultRequestHeaders du _httpClient
_httpClient.DefaultRequestHeaders.Add("Cookie",cookies);
var IsLoggedIn_response = await _httpClient.GetAsync(HelperFunctions.getUrl(
    HelperFunctions.AcctounController.name,
    HelperFunctions.AcctounController.IsLoggedIn));
Assert.Equal("true",IsLoggedIn_response.Content.ReadAsStringAsync().Result);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X