2009-09-10 5 views
2

J'ai créé une classe de contrôleur abstrait (ApplicationController) pour gérer une authentification d'utilisateur, mais HttpContext n'est pas initialisée lorsque le code est appelé.Comment accéder à HttpContext à partir d'un contrôleur de base abstrait?

public abstract class ApplicationController : Controller 
{ 
    public ApplicationController()   
    { 
     string myuser = HttpContext.User.Identity.Name; // NullReferenceException 
    } 
} 

Répondre

0

essayer de rendre votre .ctor protégé

public abstract class ApplicationController : Controller 
{ 
    protected ApplicationController() 
    { 
     string myuser = this.User.Identity.Name; 
    } 
} 

aussi vous assurer que vous n'êtes pas manquer cette directive à l'aide:

using System.Web.Mvc; 
+0

quelle différence est-il si le cteur est protégé fit? – San

+0

@San: lisez ceci http://msdn.microsoft.com/fr-fr/library/ms229047.aspx –

3

Yassir est correct sur l'utilisation des constructeurs protégés dans les classes abstraites. Mais vous avez raison de dire que cela ne résout pas votre problème - le HttpContext n'est pas encore tout à fait rempli, donc vous obtenez des exceptions de référence nulles.

Quoi qu'il en soit, la solution est simple - remplacer la méthode Initialize du contrôleur:

protected override void Initialize(System.Web.Routing.RequestContext requestContext) 
{ 
    string myuser = this.User.Identity.Name; 
    base.Initialize(requestContext); 
} 
Questions connexes