2

IResponseProcessor.Process

string format = context.Request.Query["format"].Value ?? "json";
format = format.ToLower();
Response response;
switch (format)
{
    case "protbuf":
        response = // balabalabala
    break;
    case "yaml":
        response = // balabalabala
    break;
    case "xml":
        response = // balabalabala
    break;
    case "jsonp":
        response = // balabalabala
    break;
    case "json":
    default:
        response = new JsonResponse(apiResponse, new DefaultJsonSerializer());
        break;
}
if (context.Response != null)
{
    // for test
    context.Response.Cookies.Add(new NancyCookie("wener", "cool"));
    //response.Cookies.InjectFrom(context.Response.Cookies);
    //response.Headers.InjectFrom(context.Response.Headers);
}
return response;

ValueInjecterは List を処理できません。NancyCookie にはパラメーターなしの ctor がないため、これも使用できません。

foreach なしで Cookie とヘッダーをコピーすることは可能ですか? そしてどうやって ?

4

1 に答える 1

2

JabbR で質問しましたが、お互いの質問と回答を聞き取れませんでした。:)

明確にするために、新しい応答を出力するときに Cookie を保持する必要があります。

問題は、応答に Cookie を追加することではありません。応答の方法を変更する必要があります。

デフォルトでは、Nancy がコンテンツ ネゴシエーションを処理します。

これは、ヘッダーacceptsを で渡すとjson/application、ナンシーはこれを見て自動的に JSON を送信することを意味します。

ヘッダーを変更できない場合に JSON を強制する方法もあります。これは、型をクエリに追加することによって行われます。

URL の末尾に追加.jsonすると、nancy が JSON を返すようになります。

これは、text/xmlaccept と.xmlURL に使用する場合と同じで、XML が返されます。


リクエストが常に JSON を返す場合は、次のようにすることができます。

return response.AsJson(apiResponse);

これは、新しい応答を作成するのではなく、既存の応答を返すことを意味します。すべての Cookie などが添付されます。

それが役立つことを願っています。

于 2013-11-17T02:19:51.993 に答える