2016-08-04 12 views
0

Ich habe Ausnahmecode in meinem Application_Error. Ich habe den Code von stackoverflow bekommen, es funktioniert.Ausnahmebehandlung in Application_Error, was ist sender.Context.Request?

protected void Application_Error(Object sender, EventArgs e) 
{ 

    string currentController = ""; 
    string currentAction = ""; 

    HttpContext httpContext = ((MvcApplication)sender).Context; 
    HttpRequestWrapper httpRequest = new HttpRequestWrapper(httpContext.Request); 


    RouteData currentRouteData = RouteTable.Routes.GetRouteData(new HttpContextWrapper(httpContext)); 
    if (!(currentRouteData == null)) 
    { 
     if (currentRouteData.Values["controller"] != null && !String.IsNullOrEmpty(currentRouteData.Values["controller"].ToString())) 
     { 
      currentController = currentRouteData.Values["controller"].ToString(); 
     } 
     if (currentRouteData.Values["action"] != null && !String.IsNullOrEmpty(currentRouteData.Values["action"].ToString())) 
     { 
      currentAction = currentRouteData.Values["action"].ToString(); 
     } 
    } 


    var exception = Server.GetLastError(); 
    if (exception == null) 
     return; 

    // Clear the error 
    Server.ClearError(); 

    Models.Exception ex = new Models.Exception(); 
    ex.ErrorMessage = exception.Message; 
    ex.ErrorUrl = String.Format("{0}/{1}", currentController, currentAction); 

    FreelancerDB.SaveExceptions(ex); 

    Response.Redirect("~/WebsiteAccess/SystemError"); 
} 

Das Problem ist, dass ich nicht verstehe, was in diesen 2 linies passiert:

HttpContext httpContext = ((MvcApplication)sender).Context; 
HttpRequestWrapper httpRequest = new HttpRequestWrapper(httpContext.Request); 

Kann mir jemand erklären, was hier geschieht?

+0

Haben Sie versucht, auf die MSN-Website zu gehen und zu überprüfen, was die Klassen tun? Eine einfache Suche auf Google nach dem httpRequestWrapper bringt https://msdn.microsoft.com/en-us/library/system.web.httprequestwrapper(v=vs.110).aspx, und eine Beschreibung dessen, was die Klasse tut, andere Suchlinks verweisen auf die Verwendung. – mahlatse

+0

"Kapselt das intrinsische HTTP-Objekt, das es ASP.NET ermöglicht, die HTTP-Werte zu lesen, die während einer Webanforderung von einem Client gesendet werden." **** Es ergibt keinen Sinn in meinem Kopf. Was meinen sie damit? – LalA

Antwort

0

Da passiert nichts, die Variable httpRequest wird danach nicht benutzt.

Es gibt Ihnen einen Verweis auf die Anforderung, während der die Ausnahme generiert wurde, möglicherweise benötigen Sie es.

+0

Sie werden hier verwendet: RouteTable.Routes.GetRouteData (new HttpContextWrapper (httpContext)); ??? – LalA

+0

Ja, das ist die 'httpContext'-Variable, nicht die' httpRequest'-Variable. Welchen Teil dieses Codes verstehst du nicht, und was versuchst du zu erfahren? Um die Routendaten für die aktuelle Anfrage zu erhalten, benötigen Sie deren Kontext, was genau dort passiert. – CodeCaster

+0

Was genau ist httpcontext, .Ich habe Schwierigkeiten, dies zu verstehen. was ist der Zweck ! ? Aber warum suchen wir nach der aktuellen Anfrage sie ... und nicht die vorherige Anfrage ... Es war die Prev Anfrage, die Aufwendung warf ... oder nicht? – LalA