Domanda

Non riesco a capire come usare il metodo Profile.GetProfile () in una classe di libreria. Ho provato a usare questo metodo in un Page.aspx.cs e ha funzionato perfettamente.

Come posso fare un metodo che funziona in page.aspx.cs, lavorare nella libreria di classi.

È stato utile?

Soluzione

In ASP.NET, Profile è un hook in HttpContext.Current.Profile , che restituisce un oggetto generato dinamicamente di tipo ProfileCommon, derivato da System.Web.Profile.ProfileBase .

ProfileCommon apparentemente include un metodo GetProfile (nome utente stringa), ma non lo troverai documentato ufficialmente in MSDN (e non verrà mostrato in intellisense in Visual Studio) perché la maggior parte della classe ProfileCommon viene generata dinamicamente quando l'applicazione ASP.NET viene compilato (l'elenco esatto di proprietà e metodi dipenderà dalla configurazione dei 'profili' nel tuo web.config). GetProfile () non viene menzionato su questo MSDN pagina , quindi sembra reale.

Forse nella tua classe di libreria, il problema è che le informazioni di configurazione da web.config non vengono raccolte. La tua classe di biblioteca fa parte di una soluzione che include un'applicazione Web o stai semplicemente lavorando sulla libreria in isolamento?

Altri suggerimenti

Hai provato ad aggiungere riferimenti a System.Web.dll alla tua libreria di classi e quindi:

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

Puoi utilizzare ProfileBase, ma perdi la sicurezza del tipo. Puoi mitigarlo con un'attenta gestione del cast e degli errori.

    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);
                }
            }        
        }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top