2017-09-18 5 views
-1
public static CustomerInfo Customer 
{ 
    get 
    { 
     if (System.Web.HttpContext.Current.Session["CustomerData"] == null) 
     {      
      System.Web.HttpContext.Current.Response.Redirect("~/Account/Login"); 
      return new CustomerInfo(); 
     } 
     else 
     { 
      return (CustomerInfo)System.Web.HttpContext.Current.Session["CustomerData"]; 
     } 
    } 
    set 
    { 
     System.Web.HttpContext.Current.Session["CustomerData"] = value; 
    } 
} 

Wenn HttpContext.Current.Session["CustomerData"] ist null, statt Umleitung Ansicht in Konto-Controller Login es Ausnahme gibt.MVC5 Routing-Programmierung C#

+5

Eine Eigenschaft Getter umleiten mit Nebenwirkungen sind eine schlechte Idee. – Amy

+0

Verwenden Sie einen [Aktionsfilter] (https://www.codeproject.com/Articles/1095295/Check-Session-Timeout-by-Using-ActionFilters-in-MV), um die Sitzung zu überprüfen und umzuleiten. –

+0

Danke Steve für den Vorschlag, den Aktionsfilter zu verwenden, aber ist es möglich, von Getter zur Login-Ansicht umzuleiten. – Madhurima

Antwort

-1

Versuchen:

if (System.Web.HttpContext.Current.Session["CustomerData"] == null) 
    {      
     Session["CustomerLogin"] = "True"; 
     return new CustomerInfo(); 
    } 
    else 
    { 
     Session["CustomerLogin"] = "False"; 
     return (CustomerInfo)System.Web.HttpContext.Current.Session["CustomerData"]; 
    } 

Dann in Ihrem Controller-Check:

if(Convert.ToString(Session["CustomerLogin"]) == "True"){ 
    return RedirectToAction("Login", "Account"); 
} 
+0

Kann das nicht in seiner Implementierung tun - Er versucht, dies im Getter seiner statischen Klasse zu tun - die 'CustomerInfo' zurückgibt – Alex

+0

Oh ja, Sie haben Recht. Nun, er muss überprüfen, was CustomerInfo zurückgibt und entsprechend umleiten. – Laiman

+0

Hallo Laiman danke für die Antwort. Diese öffentliche statische Methode befindet sich jedoch in der öffentlichen Klasse CustomerInformation und gibt die Ausnahme, dass RedirectToAction im aktuellen Kontext nicht vorhanden ist. – Madhurima

0

können Sie verwenden

Return RedirectToAction("Login", "Account"); 

an einen anderen Controller und Verfahren

+0

Sie können das hier nicht tun. Das ist, was ich zuerst auch dachte, aber er versucht, dies im Getter seiner statischen Klasse zu tun - die CustomerInfo() zurückgibt – Laiman