asp.net mvc - the - atributo no parece actuar en absoluto
handleerror angular 6 (6)
Tengo problemas para usar el atributo [HandleError] en las acciones de mi controlador: parece que no funciona (es decir, no importa si el filtro está allí o no) obtengo los mismos resultados ...). Cuando se lanza una excepción, obtengo el error de servidor de tono rojo estándar en la página de error de la aplicación ''/'' en lugar de mi vista personalizada.
He encontrado un par de otros temas sobre el tema aquí en SO, y en la mayoría de los casos parece que establecer la opción customErrors en On en web.config resolvió el problema. No es para mí, así que necesito encontrar una solución diferente.
Mi acción de controlador:
[HandleError]
public ActionResult Index()
{
throw new Exception("oops...");
return View();
}
En mi archivo web.config
<customErrors mode="On"></customErrors>
Me he asegurado de que el archivo Error.aspx también esté en el directorio compartido. ¿Qué me estoy perdiendo?
Estoy ejecutando ASP.NET MVC RC Refresh.
También debe especificar a qué página redireccionar.
<customErrors mode="On" defaultRedirect="Error.aspx" />
EDITAR: Perdón por que / Shared / part no debería apostar allí, pero debes decirle a MVC a qué página enviar al usuario con Error.aspx. Luego, la ruta predeterminada busca algo llamado Error.aspx en shared.
¡Era muy tarde! :) ¡Supongo que es por eso que alguien me dio un menos por la respuesta! :) Por lo menos funciona aquí amigo!
Tengo el mismo problema y tardé dos días completos en resolverlo finalmente. Resultó ser que recibí un error en la página Site.Master, y el Error.aspx utilizó esta misma página maestra como todas las demás páginas. Obviamente, el Error.aspx no podría lidiar con esa situación.
Mi solución es crear una página Error.master específica que sea liviana y no incluya ningún dato de modelo. Adicionalmente, creé un Error.htm estático en caso de que ocurra un error desde Error.aspx. La configuración de Web.config es la siguiente:
<customErrors mode="On">
<error statusCode="500" redirect="Error.htm" />
</customErrors>
Espero eso ayude.
Otra razón para este problema puede ser
En la aplicación Template MVC (generada por VS2008 / VS2008 Express), Error.aspx (generado por VS) usa la Página maestra.
Si la página maestra accede a cualquier ViewData arrojará excepción de referencia nula, entonces el error.aspx no se mostrará.
Utilice este código simple como su Error.aspx, resolverá el problema (junto con CustomErrors = On)
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<System.Web.Mvc.HandleErrorInfo>" %>
<%= Model.Exception.Message %>
Para evitar el problema 404 cuando se suponía que debía mostrarse Error.aspx, tuve que excluir el Error.aspx de la sección httpHandler, lo que impedía el acceso directo a las vistas (alrededor del marco mvc 2). Hice esto poniendo Error.aspx en una subcarpeta ''Error'' y poniendo un web.config en esta subcarpeta con un <remove path="*" verb="*" />
en la sección httpHandlers. Mi versión de este problema (y su solución) puede ser específica de MVC 2.
Recuerde actualizar la referencia predeterminada de Redirect cuando mueva Error.aspx :)
Probé las sugerencias anteriores, pero nada funcionó para mí. ¿Cuál fue el truco para eliminar esta línea de mis acciones dentro de mi controlador de errores?
Response.StatusCode = (int)HttpStatusCode.NotFound;
Estaba tirando de mi cabello ya que los mensajes de error IIS interceptaban mi manejo de errores. Y aunque no es ideal, ya que quiero proporcionar ese código de estado en mi respuesta, descubrí que eliminarlo impedía que IIS 7+ interfiriera con mi manejo de errores.
DaTribe
Dos cosas útiles que debes saber:
Por defecto, HandleError
no hace nada cuando se ejecuta bajo el servidor de desarrollo. La intención es mostrar a los desarrolladores información más útil:
public virtual void OnException(ExceptionContext filterContext) {
if (filterContext == null) {
throw new ArgumentNullException("filterContext");
}
// If custom errors are disabled, we need to let the normal ASP.NET
// exception handler execute so that the user can see useful
// debugging information.
if (filterContext.ExceptionHandled
|| ! filterContext.HttpContext.IsCustomErrorEnabled) {
return;
}
Tenga en cuenta que este caso es precisamente lo que se supone que debe controlar customError
. Si configurar customError="On"
no cambia este comportamiento:
- Verifica tu sintaxis
- Asegúrese de editar el
Web.config
en la raíz del proyecto, no el de las Vistas. - Asegúrese de que ningún código establezca
HttpContext.IsCustomErrorEnabled
. - Si todo lo demás falla, intente desactivar la depuración en
Web.config
En segundo lugar, hay ciertos tipos de errores que HandleError
nunca manejará, especialmente los errores de compilación de ASP.NET. Usted no dice qué error está encontrando.