分配给响应时自动内容协商

时间:2014-06-08 23:56:53

标签: c# nancy

如何在分配到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);
}

1 个答案:

答案 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);
    }
}