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 和 header 吗?如何 ?

4

1 回答 1

2

我在 JabbR 上问过你,但我们没有听到彼此的问题和答案。:)

因此,为了澄清,您希望在输出新响应时保留 cookie。

问题不在于将 cookie 添加到响应中,您需要更改响应方式。

Nancy 默认为您处理内容协商。

这意味着如果您使用 传递标头acceptsjson/applicationNancy 将看到并自动向您发送 JSON。

如果您无法更改标头,还有一种方法可以强制使用 JSON,这是通过将类型附加到查询来完成的。

添加.json到 URL 的末尾将使 nancy 返回 JSON。

这与text/xml用于接受和.xml用于 URL 时相同,将返回 XML。


如果您的请求总是返回 JSON,您可以执行以下操作:

return response.AsJson(apiResponse);

这意味着您要返回现有响应,而不是创建新响应。将附加所有 cookie 等。

希望有帮助。

于 2013-11-17T02:19:51.993 回答