Ho bisogno di visualizzare la mia pagina di errore 404 a Nancy come questoCome visualizzare la mia pagina 404 a Nancy?
if (ErrorCode == 404)
{
return View["404.html"];
}
Come fare?
Ho bisogno di visualizzare la mia pagina di errore 404 a Nancy come questoCome visualizzare la mia pagina 404 a Nancy?
if (ErrorCode == 404)
{
return View["404.html"];
}
Come fare?
La risposta da nemesv è corretto, ma volevo solo aggiungere un esempio utilizzando la ViewRenderer al posto del GenericFileResponse.
public class MyStatusHandler : IStatusCodeHandler
{
private IViewRenderer viewRenderer;
public MyStatusHandler(IViewRenderer viewRenderer)
{
this.viewRenderer = viewRenderer;
}
public bool HandlesStatusCode(HttpStatusCode statusCode,
NancyContext context)
{
return statusCode == HttpStatusCode.NotFound;
}
public void Handle(HttpStatusCode statusCode, NancyContext context)
{
var response = viewRenderer.RenderView(context, "/status/404");
response.StatusCode = statusCode;
context.Response = response;
}
}
Questo è il modo migliore in quanto consente di visualizzare motori e layout. +1 – sed
Si potrebbe migliorare ulteriormente un po 'usando l'estensione 'WithStatusCode' per rendere' Handle' un one-liner: 'context.Response = viewRenderer.RenderView (context," /status/404").WithStatusCode(statusCode); ' – Crisfole
È sufficiente fornire un'implementazione dell'interfaccia IStatusCodeHandler
(verrà prelevata automaticamente da Nancy).
Nel metodo HandlesStatusCode
viene restituito true per HttpStatusCode.NotFound
.
E nel metodo Handle
è necessario impostare la proprietà Response
su NancyContext
con una risposta contenente il contenuto della pagina di errore. È possibile utilizzare ad esempio il GenericFileResponse
:
public class My404Hander : IStatusCodeHandler
{
public bool HandlesStatusCode(HttpStatusCode statusCode,
NancyContext context)
{
return statusCode == HttpStatusCode.NotFound;
}
public void Handle(HttpStatusCode statusCode, NancyContext context)
{
var response = new GenericFileResponse("404.html", "text/html");
response.StatusCode = statusCode;
context.Response = response;
}
}
Assicurarsi di aggiungere lo spazio dei nomi Nancy.ErrorHandling. –