J'utilise les codes ci-dessous pour envoyer une demande POST à un serveur:
string url = "http://myserver/method?param1=1¶m2=2"
HttpClientHandler handler = new HttpClientHandler();
HttpClient httpClient = new HttpClient(handler);
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, url);
HttpResponseMessage response = await httpClient.SendAsync(request);
Je n'ai pas accès au serveur pour déboguer mais je veux savoir, est-ce que cette demande est envoyée comme POST ou GET?
Si c'est GET, comment puis-je changer mon code pour envoyer param1 & param2 en tant que POST (pas dans l'URL)?
Une alternative plus propre serait d'utiliser un Dictionary
pour gérer les paramètres. Ce sont des paires clé-valeur après tout.
private static readonly HttpClient HttpClient;
static MyClassName()
{
// HttpClient is intended to be instantiated once and re-used throughout the life of an application.
// Instantiating an HttpClient class for every request will exhaust the number of sockets available under heavy loads.
// This will result in SocketException errors.
// https://docs.Microsoft.com/en-us/dotnet/api/system.net.http.httpclient?view=netframework-4.7.1
HttpClient = new HttpClient();
}
var url = "http://myserver/method";
var parameters = new Dictionary<string, string> { { "param1", "1" }, { "param2", "2" } };
var encodedContent = new FormUrlEncodedContent (parameters);
var response = await HttpClient.PostAsync (url, encodedContent).ConfigureAwait (false);
if (response.StatusCode == HttpStatusCode.OK) {
// Do something with response. Example get content:
// var responseContent = await response.Content.ReadAsStringAsync ().ConfigureAwait (false);
}
N'oubliez pas non plus de Dispose()
HttpClient, si vous n'utilisez pas le mot clé using
Comme indiqué dans la section Remarques de la classe HttpClient dans Microsoft docs , HttpClient doit être instancié une fois et réutilisé.
Modifier:
Vous voudrez peut-être examiner response.EnsureSuccessStatusCode();
au lieu de if (response.StatusCode == HttpStatusCode.OK)
.
Vous voudrez peut-être conserver votre HttpClient et ne pas Dispose()
. Voir: HttpClient et HttpClientHandler doivent-ils être supprimés?