Профили ASP.Net: сложность настройки и использования полей профиля - PullRequest
7 голосов
/ 31 октября 2011

В настоящее время я пытаюсь использовать профили ASP.Net для хранения дополнительной информации о пользователях, зарегистрированных на нашем сайте.

Соответствующий пример кода:

UserProfile.cs

public class UserProfile: System.Web.Profile.ProfileBase
{

    public static UserProfile GetUserProfile(string username)
    {
        return Create(username) as UserProfile;
    }

    public static UserProfile GetUserProfile()
    {
        return GetUserProfile(Membership.GetUser().UserName);
    }

    public string FacebookUid
    {
        get
        {
            return base["FacebookUid"] as string;
        }
        set
        {
            base["FacebookUid"] = value;
        }
    }
}

Web.config

  <profile enabled="true" inherits="WIF.Web.STS.Classes.UserProfile" defaultProvider="XmlProfileProvider" >
      <properties>
          <add name="FacebookUid" />
      </properties>
      <providers>
          <add name="XmlProfileProvider" type="Artem.Web.Security.XmlProfileProvider, Artem.Web.Security.Xml" applicationName="/" fileName="Profiles.xml" folder="~/App_Data/"/>
      </providers>
  </profile>

Register.aspx.cs

profile = WIF.Web.STS.Classes.UserProfile.GetUserProfile(emailAddress);
    profile.FacebookUid = "";

Когда я покидаю FacebookUid, определенный в web.config; Я получаю эту ошибку от web.config:

  Configuration Error: This profile property has already been defined.

Я дважды проверил web.config; эта запись свойства встречается только один раз в файле web.config.

Я подумал, что это потому, что я настроил свойство с тем же именем в классе UserProfile. Я удалил запись properties / add [name = 'FacebookUid'] из web.config. Однажды я сделал это; Я получаю эту ошибку при попытке установить значение FacebookUid в Register.aspx.cs:

  The settings property 'FacebookUid' was not found
  Line 76:             profile["FacebookUid"] = "";

Я попробовал еще раз, на этот раз напрямую используя класс ProfileBase:

Пересмотренный Register.aspx.cs

        var profile = System.Web.Profile.ProfileBase.Create(emailAddress,true);
        profile["FacebookUid"] = "";

Пересмотренный web.config:

<profile enabled="true" defaultProvider="XmlProfileProvider" >
          <properties>
              <add name="FacebookUid" />
          </properties>
          <providers>
              <add name="XmlProfileProvider" type="Artem.Web.Security.XmlProfileProvider, Artem.Web.Security.Xml" applicationName="/" fileName="Profiles.xml" folder="~/App_Data/"/>
          </providers>
      </profile>

Я пробовал это с помощью свойств / add [name = 'FacebookUid'] и без; получил те же ошибки, что и выше, в тех же случаях.

Я в тупике, и Google / Binging ни к чему не привели. Кто-нибудь здесь имеет представление о том, что может происходить и / или как решить эту проблему? Любой конструктивный вклад приветствуется.

Спасибо, Frank

1 Ответ

5 голосов
/ 31 октября 2011

Определение пользовательских свойств в web.config, а также класса, который наследуется от ProfileBase, выглядит как перебор:

Примечания для наследников

Вы можете создать собственную реализацию профиля, которая наследуется от абстрактного класса ProfileBase иопределяет свойства для профиля пользователя, которые не указаны в элементе конфигурации профиля.

http://msdn.microsoft.com/en-us/library/system.web.profile.profilebase.aspx

Также: вы изменили код для XmlProfileProvider?Кажется, ожидается XmlProfile и ничего больше.

http://www.java2s.com/Open-Source/ASP.NET/Asp.net-Samples/tinyproviders/Artem/Web/Security/XmlProfileProvider.cs.htm

...