5 Stimmen

Asp.net mvc 3 Ausnahme erhalten

Ich habe benutzerdefinierte Fehler in der Webkonfiguration aktiviert und leite um zu "/Error/Trouble". Dies funktioniert wie vorgesehen. Elmah protokolliert den Fehler. Die Fehleransicht wird auch angezeigt.

Das Problem ist, dass ich den geworfenen Fehler im Trouble-Action meines Error-Controllers überprüfen möchte. Wie greift man auf ihn zu, nachdem MVC Sie zum benutzerdefinierten Fehlerhandler umgeleitet hat?

Ich werfe eine Ausnahme, wenn CurrentUser null ist:

        if (CurrentUser == null)
        {
            var message = String.Format("{0} ist unbekannt. Bitte kontaktieren Sie Ihren Administrator.", context.HttpContext.User.Identity.Name);
            throw new Exception(message, new Exception("Innere Ausnahme"));
        }

Ich möchte darauf zugreifen können in meinem benutzerdefinierten Fehlerhandler ("Error/Trouble"). Wie greifen Sie auf die Ausnahme zu?

Hier ist meine Trouble-Action:

    public ActionResult Trouble()
    {
        return View("Error");
    }

Hier ist meine Ansicht:

@model System.Web.Mvc.HandleErrorInfo

    Entschuldigung, ein Fehler ist bei der Verarbeitung Ihrer Anfrage aufgetreten.

@if (Model != null)
{
    @Model.Exception.Message
    @Model.Exception.GetType().Name
    geworfen in @Model.ControllerName @Model.ActionName
    Fehlerdetails:
    @Model.Exception.Message
}

System.Web.Mvc.HandleErrorInfo ist das Modell für meine Trouble-Ansicht und es ist leer. Vielen Dank für Ihre Hilfe.

2voto

Tom Schreck Punkte 4949

Ich habe einen Workaround gefunden:

Im Global.asax mache ich das:

        protected void Application_Error()
    {
        var exception = Server.GetLastError();

        HttpContext.Current.Application.Lock();
        HttpContext.Current.Application["TheException"] = exception;
        HttpContext.Current.Application.UnLock();
    }

In Error/Trouble mache ich das:

        var caughtException = (Exception)HttpContext.Application["TheException"];
        var message = (caughtException!= null) ? caughtException.Message : "Hoppla, es ist etwas Unerwartetes passiert. Bitte kontaktieren Sie Ihren Systemadministrator";
        var ex = new Exception(message);
        var errorInfo = new HandleErrorInfo(ex, "Application", "Trouble");
        return View("Error", errorInfo);

Dies funktioniert. Aber es scheint, als sei es ein seltsamer Weg, dies zu tun. Hat jemand eine bessere Lösung? Vielen Dank für Ihre Hilfe.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X