2011-11-07 26 views
9

Actualmente estoy trabajando en ServiceStack, solo como nuevo. (Muy interesante; dicen que son mejores que WCF y REST WCF (GET, POST, PUT, DELETE))¿Puedo publicar cadenas JSON/XML como una solicitud POST para REST ServiceStack?

También me pareció útil, con menos código que hacer y ejecutarlo rápido.

Actualmente cuando quiero publicar los datos. Hago objeto de clase y envío una solicitud POST.

JsonServiceClient client = new JsonServiceClient(myURL); 
MYclass cls= MakeObjectForServiceStackToInsertData(); 
var res = client.Post<MYClass>("/postrequest", cls); 

Por el código anterior, usted puede entender, qué es lo que estoy haciendo. Supongo que no estoy equivocado. Por favor, avíseme si está confundido.

¿Puedo hacer una cadena en JSON para mi clase (KEY->Value) en mi aplicación cliente (manualmente) y POST usar la pila de servicios al servidor para Enviar datos.

decir

string str = myJsonString(); 
var res = client.Post<.....> 

Así, en lugar de publicar la totalidad del objeto, es mejor si puedo hacer cadena JSON y deserializar en caso de POST de ServiceStack e insertar datos en la base de datos?

¿Alguna idea?

Respuesta

8

No estoy seguro de lo que su motivo es el de querer pasar en un JSON prima cadena es, pero si es para asegurarse de que solo transfiera una pequeña carga JSON, puede usar con confianza los Json/Jsv ServiceClients, ya que no incluyen valores nulos, de modo que solo pasarán los campos que rellene.

Puede verificar qué obtiene serilalized utilizando el serializador Json directamente.

Console.WriteLine(JsonSerializer.SerializeToString(cls)); 

Si lo que desea es probar/depurar el servicio, la mejor manera es simplemente usar el navegador, ya sea completando los campos con cadena de consulta, es decir:

http://localhost/myservice/postrequest?Field1=value1&Field2=value2 

En la mayoría de los casos en los que quiere pasar una cadena JSON sin procesar, necesitará usar otro cliente HTTP, en cuyo caso es mejor que llame a los servicios web que envían los datos de formulario POST ya que es soportado nativamente por todos los clientes HTTP y no necesita un Serializador JSON para hacer. p.ej. Así es como para llamar al mismo servicio, a través de HTTP POST con rizo:

curl -d "Field1=value1&Field2=value2" http://localhost/myservice/postrequest 

Hay muchas otras maneras que puede llamar el mismo servicio, ver Service Stack's Hello World example para la lista completa. He aquí cómo usted lo llamaría el uso de HTML:

<form action="http://localhost/myservice/postrequest" method="POST"> 
    <input type="text" name="Field1" value="value1" /> 
    <input type="text" name="Field2" value="value2" /> 
</form> 

Dado que usted está enviando desde un navegador web Servicio Pila volverá HTML, pero si usted quiere ver el JSON resultado sólo tiene que añadir format = json? a la url.

O puede simplemente usar JavaScript y jQuery para publicar en su servicio web, el siguiente ejemplo devolverá los resultados como JSON que obtienen del convierte automáticamente en un objeto JS:

$.ajax({ 
    type: 'POST', 
    url: "http://localhost/myservice/postrequest", 
    data: {Field1: "value1", Field2: "value2"}, 
    success: function(r) { alert(r.Result) }, 
    dataType: "application/json" 
}); 

Lo bueno de usar una El navegador web para depurar sus servicios es que puede usar el inspector de red integrado (es decir, el inspector web en Chrome) para ver la solicitud/respuesta completa de su servicio web.

Si no está familiarizado con él, también le recomiendo que se familiarice con Fiddler, que le permite analizar fácilmente el tráfico HTTP.

+0

Agradezco su respuesta, en mi caso me pregunto si es posible para mí en formato JSON desde la aplicación COnsole. Para obtener más detalles, eche un vistazo a mi nueva pregunta con más detalles http://stackoverflow.com/questions/8046538/json-format-data-from-console-application-to-service-stack –

Cuestiones relacionadas