example - C#: HttpClient con parámetros POST
send parameters post c# (2)
Como dijo Ben, estás POSTANDO tu solicitud (HttpMethod.Post especificado en tu código)
Los parámetros de cadena de consulta (obtener) incluidos en su url probablemente no harán nada.
Prueba esto:
string url = "http://myserver/method";
string content = "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,content);
HTH,
bovako
Yo uso los códigos a continuación para enviar la solicitud POST a un servidor:
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);
No tengo acceso al servidor para depurar, pero quiero saber si esta solicitud se envió como POST o GET.
Si es GET, ¿cómo puedo cambiar mi código para enviar param1 y param2 como datos POST (no en la URL)?
Una alternativa más limpia sería usar un Dictionary
para manejar los parámetros. Son pares clave-valor después de todo.
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);
}
Tampoco olvide Dispose()
HttpClient, si no usa la palabra clave using
Como se indica en la sección Comentarios de la clase HttpClient en los documentos de Microsoft , HttpClient debe crearse una instancia y reutilizarse.
Editar:
Es posible que desee ver en response.EnsureSuccessStatusCode();
en lugar de if (response.StatusCode == HttpStatusCode.OK)
.
Es posible que desee mantener su HttpClient y no Dispose()
. Consulte: ¿Hay que eliminar HttpClient y HttpClientHandler?