json nancy

Devolviendo una cadena que contiene Json válida con Nancy



(4)

Esto también funciona:

Response.AsText(myJsonString, "application/json");

Recibo una cadena que contiene JSON válido de otro servicio. Me gustaría simplemente reenviar esta cadena con Nancy, pero también establecer el tipo de contenido en "application / json" que me permitirá eliminar la necesidad de usar $ .parseJSON (datos) en el lado del cliente.

Si uso Response.AsJson, parece manipular el JSON en la cadena y agrega caracteres de escape. Podría crear un flujo con la cadena y establecer el tipo de respuesta algo así como:

Response test = new Response(); test.ContentType = "application/json"; test.Contents = new MemoryStream(Encoding.UTF8.GetBytes(myJsonString));

pero me gustaría saber si hay una manera más simple?


Más o menos de la manera en que lo haces. Podrías hacerlo

var response = (Response)myJsonString; response.ContentType = "application/json";

Simplemente puede crear un método de extensión en IResponseFormatter y proporcionar su propio asistente AsXXXX. Con la versión 0.8 habrá algunas extensiones en la respuesta para que pueda hacer cosas como WithHeader (..), WithStatusCode () etc-


Me gusta que pienses que debería haber una mejor manera porque tienes que usar 3 líneas de código, creo que eso dice algo sobre Nancy :-)

No puedo pensar en una "mejor" forma de hacerlo, puedes hacerlo de la manera GetBytes:

Get["/"] = _ => { var jsonBytes = Encoding.UTF8.GetBytes(myJsonString); return new Response { ContentType = "application/json", Contents = s => s.Write(jsonBytes, 0, jsonBytes.Length) }; };

O el modo "lanzar una cuerda":

Get["/"] = _ => { var response = (Response)myJsonString; response.ContentType = "application/json"; return response; };

Ambos hacen lo mismo: el último es menos código, el primero es más descriptivo (imo).


Parece que Nancy tiene un buen método de extensión Response.AsJson:

Get["/providers"] = _ => { var providers = this.interactiveDiagnostics .AvailableDiagnostics .Select(p => new { p.Name, p.Description, Type = p.GetType().Name, p.GetType().Namespace, Assembly = p.GetType().Assembly.GetName().Name }) .ToArray(); return Response.AsJson(providers); };