Как использовать Profile.GetProfile () в классе библиотеки? - PullRequest
4 голосов
/ 19 сентября 2009

Я не могу понять, как использовать метод Profile.GetProfile() в классе библиотеки. Я попытался использовать этот метод в Page.aspx.cs, и он отлично работал.

Как сделать так, чтобы метод, работающий в page.aspx.cs, работал в библиотеке классов.

Ответы [ 3 ]

2 голосов
/ 19 сентября 2009

В ASP.NET Profile является хуком в свойстве HttpContext.Current.Profile , которое возвращает динамически генерируемый объект типа ProfileCommon, полученный из System.Web.Profile.ProfileBase .

ProfileCommon, очевидно, включает в себя метод GetProfile (string username), но вы не найдете его официально зарегистрированным в MSDN (и он не будет отображаться в intellisense в visual studio), потому что большая часть класса ProfileCommon генерируется динамически, когда ваше приложение ASP.NET компилируется (точный список свойств и методов будет зависеть от того, как настроены «профили» в вашем файле web.config). GetProfile () получает упоминание на этой странице MSDN , так что оно кажется реальным.

Возможно, в вашем классе библиотеки проблема в том, что информация о конфигурации из web.config не берется. Является ли ваш класс библиотеки частью Solultion, включающей веб-приложение, или вы просто работаете над библиотекой изолированно?

1 голос
/ 19 сентября 2009

Вы пытались добавить ссылку на System.Web.dll в свою библиотеку классов, а затем:

if (HttpContext.Current == null) 
{
    throw new Exception("HttpContext was not defined");
}
var profile = HttpContext.Current.Profile;
// Do something with the profile
0 голосов
/ 15 декабря 2014

Вы можете использовать ProfileBase, но вы потеряете безопасность типов. Вы можете смягчить это с помощью тщательного приведения и обработки ошибок.

    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);
                }
            }        
        }
...