2017-08-29 4 views
0

Ich versuche, eine einfache Umleitung zu Login-Seite zu tun, wenn Sitzung in asp.net MVC 4.5 abläuft. Ich versuche es wie folgt.asp.net mvc Redirect Login ab Sitzung Ablauf

Global.asax

protected void Session_OnEnd(object sender, EventArgs e) 
{ 
    Response.RedirectToRoute("Default"); //default is route 
} 

aber hier null Ausnahme kommt und Response-Objekt nicht gefunden wird. Ich habe this Post gesehen, konnte aber nicht herausfinden, wie es ziemlich breit ist.

UPDATE

I-Filter versucht haben, die Anwendung wie folgt nun nicht, aber nicht abstürzen nicht umleiten auch nicht Seite auf Fehler.

SessionTimeoutAttribute

public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     HttpContext ctx = HttpContext.Current; 

     if (HttpContext.Current.Session["SchoolCode"] == null) 
     { 
      filterContext.Result = new RedirectResult("~/Views/Shared/Error"); 
      return; 
     } 
     base.OnActionExecuting(filterContext); 
    } 

hinzugefügt Controller-Klasse Attribut

[SessionTimeout] 
public class MapsController : Controller{} 

Warum umleiten es tut?

+0

Was meinen Sie mit "Antwortobjekt wird nicht gefunden"? Haben Sie versucht, einen "try ... catch" um Ihren Code zu setzen, um zu prüfen, ob eine Ausnahme ausgelöst wurde? –

+0

Wie die Antwort in dem Beitrag, den Sie verlinkt haben, andeutet, verwenden Sie 'ActionFilters' und suchen Sie nach' Session' darin. – adiga

+0

Ich bekomme eine Ausnahme vom Typ 'System.Web.HttpException' in System.Web.dll aufgetreten, wurde aber nicht im Benutzercode behandelt Weitere Informationen: Antwort ist in diesem Zusammenhang nicht verfügbar. – Samra

Antwort

0

Ich hatte meinen Code ein wenig

public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     HttpContext ctx = HttpContext.Current; 

     if (HttpContext.Current.Session["SchoolCode"] == null) 
     { 
      filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(
                 new { action = "Login", controller = "Account" }));     
      //return; 
     } 
     base.OnActionExecuting(filterContext); 
    } 

ignorieren Session_OnEnd Code seiner keinen Gebrauch zu ändern.