Автоматическая проверка содержимого при назначении ответа
Как использовать преимущества конвейера согласования контента при назначении 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 ответ
В стандартном движке 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);
}
}