2009-08-31 10 views
4

リクエストされたすべてのページについて、クッキーをチェックするか、クッキーがない場合は作成する必要があります。 クッキーがある場合は、そのクッキーの内容に基づいてDBから情報をロードする必要があります。asp.net mvcがベースコントローラのクッキーデータにアクセスできない

これを行うには、他のコントローラが継承するAppControllerというベースコントローラを作成しました。私はこれを実行すると、私はDefault.aspxの中で、このエラーを取得する

public MySession CurrentSessionValues; 
    public ApplicationController() 
    { 
     if (Request.Cookies["MySiteCookie"] == null) 
     { 
      // create new Record in DB 
      CurrentSessionValues = CreateMySession(); 
      HttpCookie cookie = new HttpCookie("MySiteCookie"); 
      cookie.Value = CurrentSessionValues.SessionID.ToString; 
      Response.SetCookie(cookie); 
     } 
     else 
     { 
      // use the value in MySiteCookie to get values from the DB 
      // e.g. logged in user id, cart id, etc 
     } 

    } 

その後、私はこのような何かを(CurrentSessionValuesオブジェクトはすべての私のコントローラが使用できるように)持っています

タイプのコントローラ「Mvc_Learn.Controllers.HomeController」を作成中にエラーが発生しました。

コントローラに コントローラファクトリがない場合は、パラメータなしのパブリックコンストラクタ があることを確認してください。

それはRequest.Cookiesに壊れる[「MySiteCookie」]

私はいくつかの他の方法または別の場所でこのロジックをやるべき?

答えて

9

トリックは、コンストラクタ内にコンテキストがないことです。むしろ、あなたはInitializeメソッドをオーバーライドする必要があります。

protected override void Initialize(System.Web.Routing.RequestContext requestContext) 
{ 
    //check request context for cookie and do your thang. 
} 

PS:エラーが発生した理由を後世のために、私は注意してください。例外情報の重要な部分は、コントローラの作成中にエラーが発生したことです。この場合、パラメータのないコンストラクタのビットは赤字です。発生したエラーは、HttpContextに対するnull参照例外でした。

+1

ありがとうございます - これを使用して私は使用できました: requestContext.HttpContext.Request.Cookies ["MysiteCookie"] – Nils

0

HomeControllerにパラメータのないパブリックコンストラクタがあることを確認し、親コンストラクタApplicationController()が呼び出されていることを確認します。