7

He estado buscando algunos enfoques para usar ELMaH con ASP.Net MVC para que pueda usar la página de error personalizada para todas las excepciones, incluidas las 404.¿Tiene este enfoque para usar ELMaH con olor a MVC?

Hay no shortage de questionsasking cómo obtener el /Shared/Error.aspx de funcionar correctamente en ASP.Net MVC - ya sea con o sin ELMAH. No he tenido ningún problema con esa tarea, pero creo que mi solución para usar una página 404 personalizada junto con ELMaH era demasiado simple y no puedo evitar la sensación de que debería haber más.

Después de habilitar customErrors en Web.Config, he creado una nueva acción en mi HomeController:

public ActionResult PageNotFound() 
{ 
    return null; 
} 

A partir de ahí he añadido un nuevo método en mi archivo Global.asax para aprovechar las capacidades de filtrado de registro y ELMAH , después de dejar la excepción sesión de usuario, redirigiendo la respuesta de vuelta a la mencionada PageNotFound ActionResult:

public void errorLog_Filtering(object sender, ExceptionFilterEventArgs e) 
    { 
     if (e.Exception.GetType().Equals(typeof(HttpException))) 
     { 
      HttpException ex = (HttpException)e.Exception; 
      if (ex.GetHttpCode() == 404) 
       Response.Redirect("/Home/PageNotFound"); 
     } 
    } 

estoy pasando por alto algo que viene con MVC por defecto (porque todavía estoy encontrando mi camino para una gran cantidad de t hings con respecto a MVC), o pensar demasiado sobre el problema donde existe una solución más simple? Apreciar cualquier entrada.

+0

No hay punto de vista real para volver. Solo estoy dejando que el usuario caiga en la página predeterminada /Shared/Error.aspx. –

Respuesta

2

Estoy seguro de que ASP.NET puede manejar ese tipo de cosas para usted, no necesariamente tiene que llamar a nada para redireccionar a su acción 404 dentro de su global.asax. Vea abajo para un ejemplo.

<configuration> 
    <system.web> 
     <customErrors mode="On"> 
      <error statusCode="404" redirect="/servererrors/404.aspx" /> 
     </customErrors> 
    </system.web> 
</configuration> 

http://www.xefteri.com/articles/show.cfm?id=11

+1

Ok. En primer lugar, ese artículo al que se ha vinculado fue escrito en 2002 (!) Para un público objetivo de desarrolladores de formularios web .Net 1.1. Sin embargo, su respuesta me ha hecho ver mi enfoque de nuevo y, como sospechaba, he sobrediseñado las cosas. No necesito el evento errorLog_Filtering en Global.asax, pero I * do * necesito un ActionResult accesible. Gracias por el aporte. –

+0

Disculpe, el artículo es bastante antiguo, pero el aspecto de la configuración sigue siendo bastante relevante. Poco ha cambiado en lo que respecta a las configuraciones asp.net. –

Cuestiones relacionadas