2009-08-31 22 views
4

Pour chaque page demandée, j'ai besoin de vérifier un cookie ou de le créer s'il n'y en a pas. Si le cookie est là, j'ai besoin de charger quelques informations de la base de données en fonction du contenu de ce cookie. Pour cela, j'ai créé un contrôleur de base appelé AppController dont mes autres contrôleurs héritent.asp.net mvc ne peut pas accéder aux données de cookie dans le contrôleur de base

alors j'ai quelque chose comme ça (de sorte que l'objet CurrentSessionValues ​​est disponible à tous mes contrôleurs):

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 
     } 

    } 

Quand je cours, je reçois cette erreur dans default.aspx:

Une erreur s'est produite lors de la création d'un contrôleur de type 'Mvc_Learn.Controllers.HomeController'.

Si le contrôleur ne dispose pas d'une usine de contrôleur , assurez-vous qu'il a un constructeur public sans paramètre.

Il brise sur Request.Cookies [ « MySiteCookie »]

Dois-je faire cette logique d'une autre manière ou d'un autre endroit?

Répondre

9

Trick est que vous n'avez pas forcément de contexte dans le constructeur. Au contraire, vous devez remplacer la méthode Initialize:

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

PS: pour la postérité, je constate pourquoi il y a une erreur. La partie clé de l'information d'exception est qu'une erreur est survenue lors de la création du contrôleur, le bit constructeur sans paramètre est dans ce cas un casse-tête rouge. L'erreur qui s'est produite était une exception de référence NULL à HttpContext.

+1

Merci - en utilisant ce que j'ai pu utiliser: requestContext.HttpContext.Request.Cookies ["MysiteCookie"] – Nils

0

Vérifiez que HomeController a un constructeur public sans paramètre et vérifiez que le constructeur parent ApplicationController() est appelé.

Questions connexes