Canonical
¿Cómo puedo hacer una solicitud HTTP y enviar algunos datos usando elPOST
método?
Puedo hacer una GET
solicitud, pero no tengo idea de cómo hacer una POST
solicitud.
fuente
Canonical
¿Cómo puedo hacer una solicitud HTTP y enviar algunos datos usando elPOST
método?
Puedo hacer una GET
solicitud, pero no tengo idea de cómo hacer una POST
solicitud.
Hay varias formas de realizar HTTP GET
y POST
solicitudes:
Disponible en: .NET Framework 4.5+
, .NET Standard 1.1+
, .NET Core 1.0+
.
Actualmente es el enfoque preferido, y es asíncrono y de alto rendimiento. Use la versión incorporada en la mayoría de los casos, pero para plataformas muy antiguas hay un paquete NuGet .
using System.Net.Http;
Se recomienda crear una instancia HttpClient
para la vida útil de su aplicación y compartirla a menos que tenga una razón específica para no hacerlo.
private static readonly HttpClient client = new HttpClient();
Ver HttpClientFactory
para una solución de inyección de dependencia .
POST
var values = new Dictionary<string, string>
{
{ "thing1", "hello" },
{ "thing2", "world" }
};
var content = new FormUrlEncodedContent(values);
var response = await client.PostAsync("http://www.example.com/recepticle.aspx", content);
var responseString = await response.Content.ReadAsStringAsync();
GET
var responseString = await client.GetStringAsync("http://www.example.com/recepticle.aspx");
POST
var client = new RestClient("http://example.com");
// client.Authenticator = new HttpBasicAuthenticator(username, password);
var request = new RestRequest("resource/{id}");
request.AddParameter("thing1", "Hello");
request.AddParameter("thing2", "world");
request.AddHeader("header", "value");
request.AddFile("file", path);
var response = client.Post(request);
var content = response.Content; // Raw content as string
var response2 = client.Post<Person>(request);
var name = response2.Data.Name;
Es una biblioteca más nueva que tiene una API fluida, prueba de ayuda, usa HttpClient debajo del capó y es portátil. Está disponible a través de NuGet .
using Flurl.Http;
POST
var responseString = await "http://www.example.com/recepticle.aspx"
.PostUrlEncodedAsync(new { thing1 = "hello", thing2 = "world" })
.ReceiveString();
GET
var responseString = await "http://www.example.com/recepticle.aspx"
.GetStringAsync();
Disponible en: .NET Framework 1.1+
, .NET Standard 2.0+
, .NET Core 1.0+
. En .NET Core, es principalmente por compatibilidad: se ajusta HttpClient
, es menos eficiente y no obtendrá nuevas funciones.
using System.Net;
using System.Text; // For class Encoding
using System.IO; // For StreamReader
POST
var request = (HttpWebRequest)WebRequest.Create("http://www.example.com/recepticle.aspx");
var postData = "thing1=" + Uri.EscapeDataString("hello");
postData += "&thing2=" + Uri.EscapeDataString("world");
var data = Encoding.ASCII.GetBytes(postData);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = data.Length;
using (var stream = request.GetRequestStream())
{
stream.Write(data, 0, data.Length);
}
var response = (HttpWebResponse)request.GetResponse();
var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
GET
var request = (HttpWebRequest)WebRequest.Create("http://www.example.com/recepticle.aspx");
var response = (HttpWebResponse)request.GetResponse();
var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
Esta es una envoltura alrededor HttpWebRequest
. Comparar conHttpClient
.
Disponible en: .NET Framework 1.1+
, NET Standard 2.0+
,.NET Core 2.0+
using System.Net;
using System.Collections.Specialized;
POST
using (var client = new WebClient())
{
var values = new NameValueCollection();
values["thing1"] = "hello";
values["thing2"] = "world";
var response = client.UploadValues("http://www.example.com/recepticle.aspx", values);
var responseString = Encoding.Default.GetString(response);
}
GET
using (var client = new WebClient())
{
var responseString = client.DownloadString("http://www.example.com/recepticle.aspx");
}
HttpWebResponse response = (HttpWebResponse)HttpWReq.GetResponse();
response.Result.Content.ReadAsStringAsync()
Solicitud GET simple
Solicitud POST simple
fuente
MSDN tiene una muestra.
fuente
Este es un ejemplo de trabajo completo de envío / recepción de datos en formato JSON. Utilicé Visual Studio 2013 Express Edition:
fuente
Hay algunas respuestas realmente buenas aquí. Permítanme publicar una forma diferente de configurar sus encabezados con WebClient (). También te mostraré cómo configurar una clave API.
fuente
Esta solución no usa más que llamadas estándar .NET.
Probado:
Referencia:
Código:
Para llamar sin parámetros (usa un "GET" detrás de escena):
Para llamar con parámetros (usa un "POST" detrás de escena):
fuente
Solución simple (una línea, sin comprobación de errores, sin esperar respuesta) que he encontrado hasta ahora:
Usar con precaución!
fuente
Cuando se utiliza el espacio de nombres Windows.Web.Http , para POST en lugar de FormUrlEncodedContent, escribimos HttpFormUrlEncodedContent. Además, la respuesta es tipo HttpResponseMessage. El resto es como Evan Mulawski escribió.
fuente
Si te gusta una API fluida, puedes usar Tiny.RestClient . Está disponible en NuGet .
fuente
¿Por qué esto no es totalmente trivial? Hacer la solicitud no es y, especialmente, no trata con los resultados y parece que también hay algunos errores de .NET involucrados - vea Bug en HttpClient.GetAsync debería lanzar WebException, no TaskCanceledException
Terminé con este código:
Esto hará que GET o POST dependa si
postBuffer
es nulo o noSi el éxito es verdadero, la respuesta estará en
ResponseAsString
Si el éxito es falso se puede comprobar
WebExceptionStatus
,HttpStatusCode
yResponseAsString
para tratar de ver lo que salió mal.fuente
En .net core puede realizar una llamada posterior con el siguiente código, aquí agregué algunas características adicionales a este código para que pueda hacer que su código funcione detrás de un proxy y con credenciales de red si las hay, también aquí menciono que puede cambiar la codificación de tu mensaje. Espero que esto lo explique todo y lo ayude a codificar.
fuente