Returning a string containing valid Json with Nancy

后端 未结 5 577
隐瞒了意图╮
隐瞒了意图╮ 2021-01-31 14:05

I receive a string that contains valid JSON from another service. I would like to just forward this string with Nancy but also set the content-type to \"application/json\" which

相关标签:
5条回答
  • 2021-01-31 14:50

    I like that you think there should be a better way because you're having to use 3 lines of code, I think that says something about Nancy :-)

    I can't think of a "better" way to do it, you can either do it the GetBytes way:

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

    Or the "cast a string" way:

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

    Both do the same thing - the latter is less code, the former more descriptive (imo).

    0 讨论(0)
  • 2021-01-31 14:51

    This also works:

    Response.AsText(myJsonString, "application/json");
    
    0 讨论(0)
  • 2021-01-31 14:53

    Pretty much the way you do it. You could do

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

    You could just create an extension method on IResponseFormatter and provide your own AsXXXX helper. With the 0.8 release there will be some extensions on the response it self so you can do stuff like WithHeader(..), WithStatusCode() etc-

    0 讨论(0)
  • 2021-01-31 14:59

    If all routes of your module return a JSON string, then you can set the content type in the After hook for all routes at once:

    Get["/"] = _ =>
    {
        // ... 
        return myJsonString;
    };
    
    After += ctx =>
    {
        ctx.Response.ContentType = "application/json";
    };
    
    0 讨论(0)
  • 2021-01-31 15:06

    Looks like Nancy has got a nice Response.AsJson extension method:

    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);
                };
    
    0 讨论(0)
提交回复
热议问题