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

Cas*_*roy 5 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);
}
Run Code Online (Sandbox Code Playgroud)

khe*_*ang 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);
    }
}
Run Code Online (Sandbox Code Playgroud)