Как использовать Profile.GetProfile () в классе библиотеки?
-
22-07-2019 - |
Вопрос
Я не могу понять, как использовать метод Profile.GetProfile ()
в классе библиотеки.
Я попытался использовать этот метод в Page.aspx.cs, и он работал отлично.
Как я могу сделать метод, который работает в page.aspx.cs, работать в библиотеке классов. Р>
Решение
В ASP.NET профиль представляет собой хук в 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, включающей в себя веб-приложение, или вы просто работаете над библиотекой изолированно?
Другие советы
Вы пытались добавить ссылку на System.Web.dll
в свою библиотеку классов, а затем:
if (HttpContext.Current == null)
{
throw new Exception("HttpContext was not defined");
}
var profile = HttpContext.Current.Profile;
// Do something with the profile
Вы можете использовать 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);
}
}
}