Affichage de la page CSHTML d'erreur personnalisée dans MVC5 sur 404/500 / une exception?
Je me suis arraché les cheveux toute la journée. J'essaie simplement d'afficher une page cshtml conviviale chaque fois qu'une exception est levée pour que mon UX soit cohérent - je ne veux même pas que mes utilisateurs sachent que je suis sur la pile .net depuis l'interface utilisateur, jamais.
Je teste en naviguant vers localhost:2922/junkurl
, - si l'URL ne résout pas, ne peut pas être trouvée ou génère une exception, je souhaite afficher une page cshtml rendue conviviale.
Ce que j'ai dans mon web.config:
<customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="~/Views/Shared/Error.cshtml">
</customErrors>
Cela entraîne la page d'erreur jaune par défaut. Mais si je laisse tomber une error.html
page à la racine et que j'utilise ceci:
<customErrors mode="On" redirectMode="ResponseRewrite" defaultRedirect="~/error.html">
</customErrors>
Ça marche. Le seul problème est que je ne veux pas avoir à reconstituer tout mon Layout / LoginPartial / etc avec du html simple - je veux le rendre à l'aide de rasoir. Quelle est l'approche typique à ce sujet? J'ai fait des tonnes de recherches à ce sujet, alors excuses si j'ai raté la réponse, je suis complètement perdu.
Je préfère le faire à partir du code si possible, mais d'après ce que je comprends, le code ne couvrira qu'un certain niveau d'exceptions ... à un certain moment, il semble qu'il doit être géré via config. Je souhaite juste que ce soit une configuration simple!
Essayez avec un ErrorController et la configuration suivante dans votre web.config
web.config
<customErrors mode="On" defaultRedirect="~/Error">
<error redirect="~/Error/NotFound" statusCode="404" />
<error redirect="~/Error/InternalServer" statusCode="500" />
</customErrors>
ErrorController
public class ErrorController : Controller
{
public ActionResult Index()
{
return View("Error");
}
public ActionResult NotFound()
{
Response.StatusCode = 200;
return View("NotFound");
}
public ActionResult InternalServer()
{
Response.StatusCode = 200;
return View("InternalServer");
}
}