如何在分配到NancyContext.Response
?
目前,无论是否进行任何内容协商,我的IStatusCodeHandler.Handle
方法都会返回JSON。
我希望此方法根据任何内容协商使用JSON或XML(最好使用内容协商管道。)
public void Handle(HttpStatusCode statusCode, NancyContext context)
{
var error = new { StatusCode = statusCode, Message = "Not Found" };
context.Response =
new JsonResponse(error, new JsonNetSerializer())
.WithStatusCode(statusCode);
}
答案 0 :(得分:4)
在默认的Nancy引擎中,在已经进行内容协商之后调用状态代码处理程序。如果您使用的是0.23或更新版本,则内容协商部分已被拉出到单独的服务中,并且可以随时随地使用,只需给出模型和上下文。使用此服务IResponseNegotiator
,您应该能够使用错误模型重新协商。
这样的事情:
public class MyStatusCodeHandler : IStatusCodeHandler
{
private readonly IResponseNegotiator _negotiator;
public MyStatusCodeHandler(IResponseNegotiator negotiator)
{
_negotiator = negotiator;
}
public bool HandlesStatusCode(HttpStatusCode statusCode, NancyContext context)
{
return statusCode == HttpStatusCode.NotFound;
}
public void Handle(HttpStatusCode statusCode, NancyContext context)
{
var error = new { StatusCode = statusCode, Message = "Not Found" };
context.Response = _negotiator.NegotiateResponse(error, context);
}
}