Pregunta

Esto es lo que estoy tratando de hacer en mi Global.asax.vb:

Public Class MvcApplication
    Inherits System.Web.HttpApplication

    Shared Sub RegisterRoutes(ByVal routes As RouteCollection)
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
        routes.MapRoute( _
            "Error", _
            "error.html", _
            New With {.controller = "Error", _
                      .action = "FriendlyError"} _
        )
        ...
        'other routes go here'
        ...
    End Sub

    Sub Application_Start()
        RegisterRoutes(RouteTable.Routes)
    End Sub

    Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
        ...
        'code here logs the unhandled exception and sends an email alert'
        ...
        Server.Transfer("http://www.example.com/error.html")
    End Sub

End Class

Pero ese Server.Transfer falla:

  

Ruta no válida para la solicitud secundaria 'http://www.example.com/error.html'. Se espera una ruta virtual.

¿Cómo soluciono esto? O, ¿cuál es la mejor manera de hacer esto?

¿Fue útil?

Solución

Acabo de encontrar esto en el blog de Scott Hanselman here llamado ELMAH que es un controlador / registrador de errores que puede utilizar sin tener que cambiar su código. Es posible que desee verlo, ya que parece funcionar bien con MVC.

Otros consejos

ELMAH es un excelente controlador de errores para detectar excepciones no controladas. Se conecta a la perfección a su aplicación web a través de HttpModules y tiene varias opciones de notificación y registro.

Características :

  • SQL, XML, SQLite, InMemory Logging
  • Notificación por correo electrónico
  • fuente RSS
  • detallado! registro de excepciones
  • Integración fácil
  • Señalización de error: indica al controlador de errores un error mientras " muere bien " para el usuario

Y para tu información, SO usa ELMAH, aunque sea una versión bifurcada. Esta es la mejor explicación arquitectónica y tutorial de configuración

Tienes que especificar una ruta virtual, es decir, una ruta relativa a la base de la aplicación (es decir, no hay rutas externas a la aplicación), por lo que algo como: Server.Transfer (" error.html ") o Server.Transfer (" /error.html") o Server.Transfer (" ~ / error.html ")

De forma predeterminada, las aplicaciones MVC de ASP.NET tienen una vista Shared / Error.aspx, que se hereda de

System.Web.Mvc.ViewPage<System.Web.Mvc.HandleErrorInfo>

Si su controlador utiliza el atributo [HandleError], todas las excepciones continuarán burbujeando hasta que se detecten, y terminarán en esa página.

Simplemente agregué una carga de página en línea (válida en este caso porque es el final de la línea):

<script runat="server">
  Sub Page_Load(ByVal Sender As System.Object, ByVal e As System.EventArgs)
    MyExceptionHandlerService.LogException("exceptionsource", this.Model.Exception)
  End Sub
</script>

Después de eso, los amigos " Lo siento ... " mensaje. Definitivamente, parece que ELMAH es más robusto, pero para mis necesidades, esto fue suficiente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top