muszę wyświetlać moją stronę błędu 404 w Nancy jak tenJak wyświetlić moją stronę 404 w Nancy?
if (ErrorCode == 404)
{
return View["404.html"];
}
Jak to zrobić?
muszę wyświetlać moją stronę błędu 404 w Nancy jak tenJak wyświetlić moją stronę 404 w Nancy?
if (ErrorCode == 404)
{
return View["404.html"];
}
Jak to zrobić?
Odpowiedź z nemesv jest poprawna, ale chciałem tylko dodać przykład używając ViewRenderer zamiast 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;
}
}
To jest o wiele lepszy sposób, ponieważ pozwoli na przeglądanie silników i układów. +1 – sed
Możesz poprawić to trochę bardziej, używając rozszerzenia 'WithStatusCode', aby uczynić' Handle' jedną linią: 'context.Response = viewRenderer.RenderView (context," /status/404").WithStatusCode(statusCode); ' – Crisfole
Wystarczy podać implementację interfejsu IStatusCodeHandler
(zostanie on automatycznie odebrany przez Nancy).
W metodzie HandlesStatusCode
zwraca true dla HttpStatusCode.NotFound
.
I w metodzie Handle
należy ustawić właściwość Response
na NancyContext
z odpowiedzią zawierającą treść strony błędu. Można użyć na przykład 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;
}
}
Pamiętaj, aby dodać przestrzeń nazw Nancy.ErrorHandling. –