复制nancyfx响应的cookie和标题,无需foreach

时间:2013-11-16 10:07:40

标签: c# nancy valueinjecter

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,我也不能使用this

可以在没有foreach的情况下复制cookie和标题吗?怎么样?

1 个答案:

答案 0 :(得分:2)

我在JabbR问过你,但我们没有抓住对方的问题和答案。 :)

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

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

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

这意味着如果您使用accepts传递标题json/application,Nancy会看到此信息并自动向您发送JSON。

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

.json添加到您的网址末尾将使nancy返回JSON。

对于接受使用text/xml而对URL使用.xml时,这是相同的,将返回XML。


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

return response.AsJson(apiResponse);

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

希望有所帮助。