Tengo un código JavaScript que necesito convertir a C #. Mi código JavaScript envía algún JSON a un servicio web que se ha creado. Este código JavaScript funciona bien y se parece a lo siguiente:
var vm = { k: "1", a: "2", c: "3", v: "4" };
$.ajax({
url: "http://www.mysite.com/1.0/service/action",
type: "POST",
data: JSON.stringify(vm),
contentType: "application/json;charset=utf-8",
success: action_Succeeded,
error: action_Failed
});
function action_Succeeded(r) {
console.log(r);
}
function log_Failed(r1, r2, r3) {
alert("fail");
}
Estoy tratando de averiguar cómo convertir esto a C #. Mi aplicación usa .NET 2.0. Por lo que puedo decir, necesito hacer algo como lo siguiente:
using (WebClient client = new WebClient())
{
string json = "?";
client.UploadString("http://www.mysite.com/1.0/service/action", json);
}
Estoy un poco estancado en este punto. No estoy seguro de cómo json
debería verse. No estoy seguro de si necesito configurar el tipo de contenido. Si lo hago, no estoy seguro de cómo hacerlo. Yo también vi UploadData
. Entonces, no estoy seguro de si estoy usando el método correcto. En cierto sentido, la serialización de mis datos es mi problema.
¿Alguien puede decirme qué me estoy perdiendo aquí?
¡Gracias!
WebClient
, y no lo conseguí. Luego probé esta solución y funcionó a las mil maravillas. Estaba usando enUTF8Encoding
lugar deASCIIEncoding
crear la matriz de bytes, porque no veo ninguna razón para usar ASCII, lo que reduce los caracteres disponibles de una manera que es inaceptable. ASCII solo tiene 127 caracteres en el juego de caracteres.La pregunta ya está respondida pero creo que encontré la solución que es más simple y más relevante para el título de la pregunta, aquí está:
var cli = new WebClient(); cli.Headers[HttpRequestHeader.ContentType] = "application/json"; string response = cli.UploadString("http://some/address", "{some:\"json data\"}");
PD: En la mayoría de las implementaciones de .net, pero no en todas, WebClient es IDisposable, por lo que, por supuesto, es mejor hacer 'using' o 'Dispose' en él. Sin embargo, en este caso particular no es realmente necesario .
fuente
El siguiente ejemplo demuestra cómo PUBLICAR un JSON a través del método WebClient.UploadString :
var vm = new { k = "1", a = "2", c = "3", v= "4" }; using (var client = new WebClient()) { var dataString = JsonConvert.SerializeObject(vm); client.Headers.Add(HttpRequestHeader.ContentType, "application/json"); client.UploadString(new Uri("http://www.contoso.com/1.0/service/action"), "POST", dataString); }
fuente
POST
argumento ya queUploadString
implícitamente utiliza este método como predeterminado. Además, es posible que desee agregarclient.Headers.Add(HttpRequestHeader.Accept, "application/json");
si lo esperaJSON
como devolución.public class WebClient : Component
public class Component : MarshalByRefObject, IComponent, IDisposable