2017-09-18 10 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; 
    } 
} 

たびHttpContext.Current.Session["CustomerData"]ではなく、それは例外を与えているアカウントコントローラのビューログインするためにリダイレクトする、nullです。MVC5ルーティングプログラミングC#の

+5

とプロパティのゲッターを使用することができます副作用は悪い考えです。 – Amy

+0

[アクションフィルタ](https://www.codeproject.com/Articles/1095295/Check-Session-Timeout-by-Using-ActionFilters-in-MV)を使用してセッションを確認し、リダイレクトします。 –

+0

Steveにアクションフィルタを使用するよう提案しましたが、ゲッターからログインビューにリダイレクトすることは可能です。 – Madhurima

答えて

-1

試してみてください。

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"]; 
    } 

その後、あなたのコントローラのチェックに:

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

彼の実装ではできません - 彼は静的クラスのゲッターでこれをしようとしています。これは 'CustomerInfo'を返します – Alex

+0

ああ、そうです。さて、彼は、CustomerInfoが何を返してそれに応じてリダイレクトするかチェックする必要があります。 – Laiman

+0

こんにちはLaimanは返事をありがとう。このpublic staticメソッドはパブリッククラスCustomerInformationの内部にあり、RedirectToActionが現在のコンテキストに存在しないという例外があります – Madhurima

0

あなたが別のコントローラにリダイレクトする

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

及び方法

+0

ここではできません。それは私が最初に考えたことですが、彼は静的クラスのゲッターでこれをやろうとしています。これはCustomerInfo()を返します。 – Laiman