Estoy tratando de crear una página de error HTTP 404 personalizada cuando alguien escribe una URL que no invoca una acción o controlador válido en ASP.NET MVC, en lugar de mostrar el error genérico de ASP.NET "Recurso no encontrado".
No quiero usar web.config para manejar esto.
¿Existe algún tipo de magia de enrutamiento que pueda hacer para detectar URL no válidas?
Actualización: probé la respuesta dada, sin embargo, todavía recibo el feo mensaje "Recurso no encontrado".
Otra actualización: Ok, aparentemente algo cambió en RC1. Incluso he intentado capturar específicamente 404 en un HttpException
y todavía me da la página "Recurso no encontrado".
Incluso he usado la función de recursos de MvcContrib y nada, el mismo problema. ¿Algunas ideas?
Respuestas:
Simplemente agregue capturar todas las rutas al final de la tabla de rutas y muestre la página que desee con ella.
Ver: ¿Cómo puedo hacer una captura de todas las rutas para manejar consultas de 'página 404 no encontrada' para ASP.NET MVC?
fuente
Intenté habilitar errores personalizados en el servidor de producción durante 3 horas, parece que encontré una solución final sobre cómo hacer esto en ASP.NET MVC sin ninguna ruta.
Para habilitar errores personalizados en la aplicación ASP.NET MVC, necesitamos (IIS 7+):
Configure páginas personalizadas en la configuración web en la
system.web
sección:RemoteOnly
significa que en la red local verá errores reales (muy útiles durante el desarrollo). También podemos reescribir la página de error para cualquier código de error.Establecer el parámetro de respuesta mágica y el código de estado de respuesta (en el módulo de manejo de errores o en el atributo de manejo de errores)
Establezca otra configuración mágica en la configuración web en la
system.webServer
sección:Esto fue lo último que encontré y después de esto puedo ver errores personalizados en el servidor de producción.
fuente
customErrors
resultados en una redirección 302 solo para cargar su página de error.Conseguí que mi manejo de errores funcionara creando un ErrorController que devuelve las vistas en este artículo. También tuve que agregar "Catch All" a la ruta en global.asax.
No veo cómo llegará a cualquiera de estas páginas de error si no está en Web.config ..? Mi Web.config tuvo que especificar:
y luego también agregué:
fuente
Fuente
NotFoundMVC : proporciona una página 404 fácil de usar cuando no se encuentra un controlador, una acción o una ruta en su aplicación ASP.NET MVC3. Se representa una vista llamada NotFound en lugar de la página de error de ASP.NET predeterminada.
Puede agregar este complemento a través de nuget usando: Install-Package NotFoundMvc
NotFoundMvc se instala automáticamente durante el inicio de la aplicación web. Maneja todas las diferentes formas en que ASP.NET MVC generalmente lanza una HttpException 404. Esto incluye un controlador, una acción y una ruta que faltan.
Guía de instalación paso a paso:
1 - Haga clic con el botón derecho en su proyecto y seleccione Administrar paquetes Nuget ...
2 - Búscalo
NotFoundMvc
e instálalo.3 - Una vez completada la instalación, se agregarán dos archivos a su proyecto. Como se muestra en las capturas de pantalla a continuación.
4 - Abra el NotFound.cshtml recién agregado presente en Views / Shared y modifíquelo a su gusto. Ahora ejecute la aplicación y escriba una URL incorrecta, y será recibido con una página 404 fácil de usar.
No más, los usuarios recibirán mensajes de error como
Server Error in '/' Application. The resource cannot be found.
Espero que esto ayude :)
PD: Felicitaciones a Andrew Davey por hacer un complemento tan increíble.
fuente
Pruebe esto en web.config para reemplazar las páginas de error de IIS. Esta es la mejor solución, supongo, y también envía el código de estado correcto.
Más información de Tipila: use páginas de error personalizadas ASP.NET MVC
fuente
Esta solución no necesita cambios en el archivo web.config ni rutas generales.
Primero, cree un controlador como este;
Luego, cree la vista en "Vistas / Error / Index.cshtml" como;
Luego agregue lo siguiente en el archivo asax global como se muestra a continuación:
Si aún obtiene la página de error de IIS personalizada después de hacer esto, asegúrese de que las siguientes secciones estén comentadas (o vacías) en el archivo de configuración web:
fuente
Response.End();
al final de su controlador Application_Error. Sin esto, solo se activa la primera aparición de un error para una sesión determinada, lo cual es un problema cuando, por ejemplo, tiene un registro de errores personalizado en el controlador Application_Error.Si trabaja en MVC 4, puede ver esta solución, funcionó para mí.
Agregue el siguiente método Application_Error a my
Global.asax
:El controlador en sí es realmente simple:
Verifique el código fuente completo de Mvc4CustomErrorPage en GitHub .
fuente
Tuve el mismo problema, lo que tienes que hacer es, en lugar de agregar el atributo customErrors en el archivo web.config en tu carpeta Vistas, tienes que agregarlo en el archivo web.config en la carpeta raíz de tu proyecto
fuente
Aquí hay una respuesta verdadera que permite personalizar completamente la página de error en un solo lugar. No es necesario modificar web.config o crear un código separado.
Funciona también en MVC 5.
Agregue este código al controlador:
Basado en http://www.eidias.com/blog/2014/7/2/mvc-custom-error-pages
fuente
Hablaré de algunos casos específicos,
si está utilizando el 'método PageNotFound' en HomeController como se muestra a continuación
esto no funcionaría. Pero debe borrar las etiquetas de ruta como se muestra a continuación,
Y si lo cambia como nombre del método en web.config , funciona. Sin embargo, no olvide hacer código como el siguiente en web.config
fuente