2009-09-18 5 views

Répondre

2

Dans ASP.NET, le profil est un crochet dans la propriété HttpContext.Current.Profile, qui retourne un objet généré dynamiquement de type ProfileCommon, dérivé à partir de System.Web.Profile.ProfileBase. ProfileCommon inclut apparemment une méthode GetProfile (nom d'utilisateur de chaîne), mais vous ne la trouverez pas documentée officiellement dans MSDN (et ne s'affichera pas dans intellisense dans Visual Studio) car la plupart de la classe ProfileCommon est générée dynamiquement lorsque votre ASP.NET l'application est compilée (La liste exacte des propriétés et des méthodes dépend de la façon dont les 'profiles' sont configurés dans votre web.config). GetProfile() does get a mention on this MSDN page, donc il semble être réel. Peut-être que dans votre classe de bibliothèque, le problème est que les informations de configuration de web.config ne sont pas détectées. Votre classe de bibliothèque fait-elle partie d'une Solultion qui comprend une application Web ou travaillez-vous uniquement sur la bibliothèque de manière isolée?

+0

La bibliothèque fait partie de la solution –

+0

Dans votre classe de bibliothèque, les autres propriétés de l'objet 'Profile' fonctionnent-elles correctement? ou tout l'objet Profile ne fonctionne-t-il pas? – codeulike

1

Avez-vous essayé d'ajouter une référence à System.Web.dll à votre bibliothèque de classes puis:

if (HttpContext.Current == null) 
{ 
    throw new Exception("HttpContext was not defined"); 
} 
var profile = HttpContext.Current.Profile; 
// Do something with the profile 
+0

HttpContext.Current.Profile ont seule méthode en ce qui concerne le profil actuel et ne contient pas GetProfile() Méthode –

+0

Si j'ai essayé HttpContext.Current.Profile je suis évidemment Ajouté le system.web dll à ma bibliothèque de classe son de la même que HttpContext.Current.Profile –

+0

Pourriez-vous pointer vers la documentation MSDN de la méthode GetProfile dont vous parlez? Je n'arrive pas à trouver une telle méthode. –

0

Vous pouvez utiliser ProfileBase, mais vous perdez la sécurité de type. Vous pouvez atténuer cela avec un casting prudent et une gestion des erreurs.

string user = "Steve"; // The username you are trying to get the profile for. 
    bool isAuthenticated = false; 

     MembershipUser mu = Membership.GetUser(user); 

     if (mu != null) 
     { 
      // User exists - Try to load profile 

      ProfileBase pb = ProfileBase.Create(user, isAuthenticated); 

      if (pb != null) 
      { 
       // Profile loaded - Try to access profile data element. 
       // ProfileBase stores data as objects in a Dictionary 
       // so you have to cast and check that the cast succeeds. 

       string myData = (string)pb["MyKey"]; 

       if (!string.IsNullOrWhiteSpace(myData))    
       { 
        // Woo-hoo - We're in data city, baby! 
        Console.WriteLine("Is this your card? " + myData); 
       } 
      }   
     } 
Questions connexes