4

I cant figure out how to use Profile.GetProfile() method in a library class. I tried using this method in a Page.aspx.cs and it worked perfectly.

How can I make a method that works in the page.aspx.cs, work in the class library.

Greg B
  • 14,597
  • 18
  • 87
  • 141
Or Betzalel
  • 2,427
  • 11
  • 47
  • 70

3 Answers3

2

In ASP.NET, Profile is a hook into the HttpContext.Current.Profile property, which returns a dynamically generated object of type ProfileCommon, derived from System.Web.Profile.ProfileBase.

ProfileCommon apparently includes a GetProfile(string username) method, but you wont find it documented officially in MSDN (and it wont show up in intellisense in visual studio) because most of the ProfileCommon class is dynamically generated when your ASP.NET application is compiled (The exact list of properties and methods will depend on how 'profiles' are configured in your web.config). GetProfile() does get a mention on this MSDN page, so it seems to be real.

Perhaps in your library class, the problem is that the configuration info from web.config is not being picked up. Is your library class part of a Solultion that includes a Web Application, or are you just working on the library in isolation?

codeulike
  • 22,514
  • 29
  • 120
  • 167
1

Have you tried adding reference to System.Web.dll to your class library and then:

if (HttpContext.Current == null) 
{
    throw new Exception("HttpContext was not defined");
}
var profile = HttpContext.Current.Profile;
// Do something with the profile
Darin Dimitrov
  • 1,023,142
  • 271
  • 3,287
  • 2,928
  • HttpContext.Current.Profile only have method regarding the current profile, and does not contain GetProfile() Method – Or Betzalel Sep 18 '09 at 21:11
  • If I tried HttpContext.Current.Profile I obviously Added the system.web Dll to my class library its the same as HttpContext.Current.Profile – Or Betzalel Sep 18 '09 at 21:15
  • Could you point to the MSDN documenattion of the GetProfile method you are talking about? I can't seem to find such method. – Darin Dimitrov Sep 18 '09 at 21:16
  • Profile.GetProfile(string username) ill give you an MSDN documenattion in a few minutes – Or Betzalel Sep 18 '09 at 21:21
  • System.Web.UI.Page or its base classes does not contain a property called "Profile". – Darin Dimitrov Sep 18 '09 at 21:29
  • The object returned by HttpContext.Current.Profile is a dynamically generated ProfileCommon object. It does have a GetProfile() method, but it doesnt show up in intellisense due to being dynamically generated ... – codeulike Sep 18 '09 at 22:17
0

You can use ProfileBase, but you lose type-safety. You can mitigate that with careful casting and error handling.

    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);
                }
            }        
        }
Steve Hibbert
  • 2,045
  • 4
  • 30
  • 49