Ошибка при создании пользователя - ASP.NET System.Web.Providers - PullRequest
2 голосов
/ 11 июля 2011

Я использую новых универсальных провайдеров ASP.NET, как описано в этом комментарии к сообщению в блоге Hanselman :

Я могу подключить его для аутентификации, используя следующее:

<profile defaultProvider="DefaultProfileProvider" >
  <providers>
    <add name="DefaultProfileProvider" type="System.Web.Providers.DefaultProfileProvider1" connectionStringName="DefaultConnection" applicationName="/"/>
  </providers>
</profile>
<membership defaultProvider="DefaultMembershipProvider">
  <providers>
    <add name="DefaultMembershipProvider" type="System.Web.Providers.DefaultMembershipProvider" connectionStringName="DefaultConnection"               enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false"             maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10"             applicationName="/" />
  </providers>
</membership>
<roleManager defaultProvider="DefaultRoleProvider">
  <providers>
    <add name="DefaultRoleProvider" type="System.Web.Providers.DefaultRoleProvider" connectionStringName="DefaultConnection" applicationName="/" />
  </providers>
</roleManager>

Затем я пытаюсь создать нового пользователя, используя следующий код

object akey = System.Guid.NewGuid();
MembershipCreateStatus status;
var member = new System.Web.Providers.DefaultMembershipProvider();               
member.CreateUser("New User", "password","newUser@newuser.com","First Pet","Rover",true,akey,out status)

Я получаю ошибку с этой трассировкой стека:

Ссылка на объект не установлена ​​для экземпляра объекта в System.Web.Providers.Entities.ModelHelper.CreateEntityConnection (параметр ConnectionStringSettings, String csdl, String ssdl, String msl) в System.Web.Providers.Entities.ModelHelper.CntetS (установка) в System.Web.Providers.DefaultMembershipProvider.Membership_CreateUser (строковое имя приложения, строковое имя пользователя, строковый пароль, строковая соль, строковая электронная почта, строковое значение passwordQuestion, строковое значение passwordAnswer, логическое значение isApproved, DateTime & createDate, логический объект уникального типа UserEeyEser3232), строковый пароль, ответ на запрос, строковый парольSystem.Web.Providers.DefaultMembershipProvider.CreateUser (строковое имя пользователя, строковый пароль, строковое электронное письмо, строковое passwordQuestion, строковое passwordAnswer, логическое значение isApproved, object providerUserKey, MembershipCreateStatus & status)

Я полагаю, что для проверки подлинности соединения с базой данных должно быть достаточноработает.Что я делаю не так?

Только что заметил, что для свойства Application члена по-прежнему установлено значение Null.Ожидал бы, что это будет "/", если он читает его из конфигурации.Может быть, это не чтение конфигурации.

Просто обнаружил, что, если я добавлю следующее, это будет работать:

config.Add("connectionStringName", "DefaultConnection");

            member.Initialize("DefaultMembershipProvider",config);

Но я бы подумал, что оно должно забрать его из файла конфигурации.

Ответы [ 2 ]

2 голосов
/ 11 июля 2011

Проверьте строку подключения для ApplicationServices в web.config.

0 голосов
/ 26 мая 2013

Ошибка, которую вы сделали, заключается в том, что вы создали новый экземпляр DefaultMembershipProvider.

var member = new System.Web.Providers.DefaultMembershipProvider(); 
member.CreateUser("New User", "password", "newUser@newuser.com", "First Pet", "Rover", true, akey, out status)

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

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

Membership.CreateUser("New User", "password", "newUser@newuser.com", "First Pet", "Rover", true, akey, out status);

Настройки будутзагружаться из web.config автоматически.

...