用Nancy返回一个包含有效的Json的string
我收到一个包含来自另一个服务的有效JSON的string。 我只想转发这个string与南希,但也将内容types设置为“application / json”,这将允许我删除在客户端使用$ .parseJSON(数据)的需要。
如果我使用Response.AsJson它似乎是在string中的JSON,并添加转义字符。 我可以用string创build一个Stream并设置响应types如下所示:
Response test = new Response(); test.ContentType = "application/json"; test.Contents = new MemoryStream(Encoding.UTF8.GetBytes(myJsonString));
但想知道是否有一个更简单的方法?
我喜欢你认为应该有一个更好的方法,因为你不得不使用3行代码,我认为这说了一些关于南希:-)
我想不出一个“更好”的方法来做到这一点,你可以这样做GetBytes的方式:
Get["/"] = _ => { var jsonBytes = Encoding.UTF8.GetBytes(myJsonString); return new Response { ContentType = "application/json", Contents = s => s.Write(jsonBytes, 0, jsonBytes.Length) }; };
或者“投串”的方式:
Get["/"] = _ => { var response = (Response)myJsonString; response.ContentType = "application/json"; return response; };
两者都做同样的事情 – 后者是更less的代码,前者更具描述性(imo)。
看起来像南希有一个很好的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); };
这也适用:
Response.AsText(myJsonString, "application/json");
非常像你这样做。 你可以做
var response = (Response)myJsonString; response.ContentType = "application/json";
你可以在IResponseFormatter上创build一个扩展方法,并提供你自己的AsXXXX帮助器。 随着0.8版本将有一些自我响应的扩展,所以你可以做像WithHeader(..),WithStatusCode()etc –