Bocadillos dot NET #3
Cuando un usuario intenta acceder a una página que no existe en una aplicación web, el servidor devuelve un error 404 (Not Found). Si no configuramos este error correctamente en una aplicación ASP.NET MVC, el usuario verá una página genérica del servidor que no es amigable y que tampoco es recomendable enseñar.En esta guía, vamos a ver cómo personalizar la página de error 404 en ASP.NET MVC con .NET Framework. Implementaremos un controlador de errores, una vista personalizada y configuraremos el web.config para manejar correctamente estos casos. Esto mejorará la experiencia del usuario y permitirá redirigirlo a una página más informativa en lugar de mostrar un mensaje de error abrupto.
Crear la vista personalizada
Lo primero será navegar hasta la carpeta Views/Shared y creamos un archivo NotFound.cshtml.
Para que tengamos una plantilla o template para probar, podés copiar y pegar este código html:
@model System.Web.Mvc.HandleErrorInfo
<h2>Página no encontrada</h2>
<p>Lo sentimos, la página que estás buscando no existe.</p>
<a href="@Url.Action("Index", "Home")">Volver al inicio</a>
Configurar el controlador de errores
Paso siguiente, agregaremos un controller en la carpeta correspondiente Controllers y programaremos un action NotFound para manejar el error 404.
public class ErrorController : Controller
{
public ActionResult NotFound()
{
Response.StatusCode = 404;
return View();
}
}
Modificar el Web.Config
Ahora debemos indicarle a .NET que vamos a trabajar con errores personalizados, por lo que deberemos agregar los siguiente a nuestro Web.Config en la sección <system.web>:
<system.web>
<customErrors mode="On">
<error statusCode="404" redirect="~/Error/NotFound" />
</customErrors>
</system.web>
Manejar errores en Global.asax
Si bien este paso es opcional, es recomendable. Con lo configurado anteriormente ya deberías tener solucionado el problema de manejar errores 404 pero si agregamos Application_Error en Global.asax puede ser útil en los siguientes casos:
- Cuando querés capturar otros errores además del 404, como errores 500 (internos del servidor).
- Si querés registrar los errores en logs antes de redirigirlos.
- Cuando la configuración de customErrors no funciona correctamente en ciertos entornos (por ejemplo, en IIS con configuraciones específicas).
protected void Application_Error()
{
var exception = Server.GetLastError();
if (exception is HttpException httpException)
{
if (httpException.GetHttpCode() == 404)
{
Response.Clear();
Server.ClearError();
Response.Redirect("~/Error/NotFound");
}
}
}