Pregunta

En mi proyecto web MVC. Estoy tratando de mostrar páginas de error personalizadas a mis visitantes sin utilizar "custromerrors" elemento en web.config.

Me puede capturar las excepciones, como a continuación

protected void Application_Error(object sender, EventArgs e)
{

    Exception exception = Server.GetLastError();

    bool success = RaiseErrorSignal(exception);

    Response.Clear();

    HttpException httpException = exception as HttpException;

    RouteData routeData = new RouteData();
    routeData.Values.Add("controller", "Error");

    if (httpException == null)
    {
        routeData.Values.Add("action", "Index");
    }
    else //It's an Http Exception, Let's handle it.
    {
        switch (httpException.GetHttpCode())
        {
            case 404:
                // Page not found.
                routeData.Values.Add("action", "Error404");
                break;
            case 500:
                // Server error.
                routeData.Values.Add("action", "Error500");
                break;

            // Here you can handle Views to other error codes.
            // I choose a General error template  
            default:
                routeData.Values.Add("action", "Index");
                break;
        }
    }

    // Pass exception details to the target error View.
    routeData.Values.Add("error", exception);

    // Clear the error on server.
    Server.ClearError();

    // Call target Controller and pass the routeData.
    IController errorController = new ProjectName.WebSite.Controllers.ErrorController();
    errorController.Execute(new RequestContext(
         new HttpContextWrapper(Context), routeData));


}

private static bool RaiseErrorSignal(Exception e)
{
    var context = HttpContext.Current;
    if (context == null)
        return false;
    var signal = ErrorSignal.FromContext(context);
    if (signal == null)
        return false;
    signal.Raise(e, context);
    return true;
}

Pero Elmah no puede registrar errores también estoy criando señal de error.

¿Fue útil?

Solución

He encontrado el problema, echaba de menos una sección de web.config. He añadido el módulo "ErrorLog" a <system.webserver><modules>.

También hay que añadirlo a <system.web><httpModules>.

Después de la adición, Elmah empezar a registrar los errores.

También no necesito llamar al método ErrorSignal.Raise (), Elmah puede detectar errores y sin señalización.

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