Pregunta

Estoy escribiendo una pequeña herramienta en C# que necesitará enviar y recibir datos hacia/desde un sitio web utilizando el formato POST y json.Nunca antes había hecho algo como esto en C# (ni en ningún otro lenguaje), así que me cuesta encontrar información útil para comenzar.

Encontré información sobre la clase WebRequest en C# (específicamente de aquí) pero antes de empezar a profundizar en ello, me preguntaba si esta era la herramienta adecuada para el trabajo.

Encontré muchas herramientas para convertir datos al formato json, pero no mucho más, por lo que cualquier información sería muy útil aquí en caso de que termine en un callejón sin salida.

¿Fue útil?

Solución

WebRequest y más específicamente la clase HttpWebRequest es un buen punto de partida para lo que desea lograr.Para crear la solicitud, utilizará WebRequest.Create y enviará la solicitud creada a HttpWebRequest para usarla realmente.Luego crearás los datos de tu publicación y los enviarás a la transmisión como:

HttpWebRequest req = (HttpWebRequest)
WebRequest.Create("http://mysite.com/index.php");
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
string postData = "var=value1&var2=value2";
req.ContentLength = postData.Length;

StreamWriter stOut = new
StreamWriter(req.GetRequestStream(),
System.Text.Encoding.ASCII);
stOut.Write(postData);
stOut.Close();

De manera similar, puede leer la respuesta utilizando el método GetResponse, que le permitirá leer el flujo de respuesta resultante y hacer cualquier otra cosa que necesite hacer.Puedes encontrar más información sobre la clase en:

http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.aspx

Otros consejos

Cliente Web A veces es más fácil de usar que Solicitud Web.Quizás quieras echarle un vistazo.

Para la deserialización JSON, querrás mirar el JavaScriptSerializador clase.

Ejemplo de cliente web:

using (WebClient client = new WebClient ())
{
    //manipulate request headers (optional)
    client.Headers.Add (HttpRequestHeader.UserAgent, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");

    //execute request and read response as string to console
    using (StreamReader reader = new StreamReader(client.OpenRead(targetUri)))
    {
        string s = reader.ReadToEnd ();
        Console.WriteLine (s);
    }
}

Marcado como wiki por si alguien quiere actualizar el código.

Cuando se trata de PUBLICAR datos en un sitio web, Solicitud System.Net.HttpWeb (la implementación HTTP específica de WebRequest) es una solución perfectamente decente.Admite SSL, solicitudes asíncronas y muchas otras ventajas, y está bien documentado en MSDN.

La carga útil puede ser cualquier cosa:datos en formato JSON o lo que sea, siempre que establezca la propiedad ContentType en algo que el servidor espera y comprende (probablemente aplicación/json, texto/json o texto/x-json), todo estará bien.

Un problema potencial al utilizar HttpWebRequest desde un servicio del sistema:dado que utiliza el proxy de IE y la información de credenciales, el comportamiento predeterminado puede ser un poco extraño cuando se ejecuta como usuario de LOCALSYSTEM (o básicamente cualquier cuenta que no inicia sesión interactivamente de forma regular).Establecer las propiedades de Proxy y Autenticación en Nothing (o, como la gente de C# prefiere llamarlo, null, supongo) debería evitar eso.

He utilizado WebRequest para interactuar con sitios web.Es la 'herramienta' adecuada

No puedo comentar sobre el aspecto JSON de tu pregunta.

La respuesta actualmente mejor calificada es útil, pero no envía ni recibe JSON.

A continuación se muestra un ejemplo que utiliza JSON tanto para enviar como para recibir:

Cómo publicar un objeto json en un servicio web

Y aquí está la pregunta de StackOverflow que más me ayudó a resolver este problema:

Problemas al enviar y recibir JSON entre el servicio web ASP.net y el cliente web ASP.Net

Y aquí hay otra pregunta relacionada:

llamada json con C#

Para convertir de un objeto de instancia a una cadena con formato json y viceversa, pruebe Json.NET:http://json.codeplex.com/

Actualmente lo estoy usando para un proyecto y es fácil de aprender y trabajar y ofrece cierta flexibilidad en términos de serialización y convertidores de tipos personalizados.También admite una sintaxis LINQ para consultar entradas json.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top