在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和标题吗?怎么样?
答案 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都将附上等等。
希望有所帮助。