2013-01-18 20 views
8

Jestem nowy w asp.net. Próbuję utworzyć prostą stronę logowania i rejestracji za pomocą narzędzia WebMatrix. Ale pojawia się następujący komunikat o błędzie podczas próby utworzenia konta:Wystąpił błąd "Dostawca napotkał nieznany błąd" podczas próby WebSecurity.CreateAccount na stronie asp.net


The Provider encountered an unknown error. 

Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.Web.Security.MembershipCreateUserException: The Provider encountered an unknown error. 

Source Error: 


Line 32:     db.Execute("INSERT INTO UserData (Email,Name) VALUES (@0,@1)", email, username); 
Line 33:     
Line 34:     WebSecurity.CreateAccount(email,password); 
Line 35:     Response.Redirect("Homepage.cshtml"); 
Line 36:    } 


Source File: c:\Users\admin\Documents\My Web Sites\Login\Register.cshtml Line: 34 

Stack Trace: 


[MembershipCreateUserException: The Provider encountered an unknown error.] 
    WebMatrix.WebData.SimpleMembershipProvider.CreateAccount(String userName, String password, Boolean requireConfirmationToken) +1312 
    WebMatrix.WebData.WebSecurity.CreateAccount(String userName, String password, Boolean requireConfirmationToken) +31 
    ASP._Page_Register_cshtml.Execute() in c:\Users\admin\Documents\My Web Sites\Login\Register.cshtml:34 
    System.Web.WebPages.WebPageBase.ExecutePageHierarchy() +207 
    System.Web.WebPages.WebPage.ExecutePageHierarchy(IEnumerable`1 executors) +68 
    System.Web.WebPages.WebPage.ExecutePageHierarchy() +156 
    System.Web.WebPages.StartPage.RunPage() +19 
    System.Web.WebPages.StartPage.ExecutePageHierarchy() +65 
    System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) +76 
    System.Web.WebPages.WebPageHttpHandler.ProcessRequestInternal(HttpContextBase httpContext) +119 

Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.272 

Każda pomoc jest mile widziana. Dzięki.

+0

Może problem jest w twoja metoda InitializeDatabaseConnection. Czy możesz to opublikować? – GmG

Odpowiedz

4

Koniecznie:

  1. Tworzenie pierwszy rekord użytkownika
  2. Invoke WebMatrix, aby utworzyć konto użytkownika.

Poniżej jest mój kod, który rozwiązać ten sam problem masz mający:

public ActionResult SignUp(SignUpModel model) 
    { 
     if (ModelState.IsValid) 
     { 
      using (MorphometryContext context = new MorphometryContext()) 
      { 
       User user = new User 
       { 
        Email = model.Email, 
        FirstName = model.FirstName, 
        LastName = model.LastName, 
        Username = model.UserName 
       }; 
       context.Users.Add(user); 
       context.SaveChanges(); 
      } 

      // Attempt to register the user 
      try 
      { 
       WebSecurity.CreateAccount(model.UserName, model.Password); 
      } 
      catch (MembershipCreateUserException e) 
      { 
       ModelState.AddModelError("", ErrorCodeToString(e.StatusCode)); 
       return View(); 
      } 

      WebSecurity.Login(model.UserName, model.Password); 
      return RedirectToAction("Index", "Projects"); 
     } 

Również nie chcesz Respoonse.Redirect do .cshtml pliku. Zamiast tego powinieneś zwrócić RedirectToAction i przekazać nazwy akcji i kontrolera.

0

Właśnie miałem ten problem - ale twój kod może nie być to samo. Próbowałem utworzyć rekord członkostwa przed utworzeniem rekordu w mojej własnej tabeli użytkowników. To musi być na odwrót.

Chciałbym sprawdzić, czy twoje zapytanie INSERT INTO UserData rzeczywiście działa.

4

prostu miałem ten sam problem ... używałem

WebSecurity.CreateAccount(model.UserName, model.Password); 

a przede wygenerowanego problemu ..

potem próbowałem:

WebSecurity.CreateAccountAndUser(model.UserName, model.Password); 

i dowiedzieć się, że byłem brakuje innych wymaganych pól w mojej tabeli Użytkownicy (UserProfile). Następujące pracował dla mnie:

WebSecurity.CreateAccountAndUser(model.UserName, model.Password, new {RequiredColumn1 = Value1, RequiredColumn2 = Value 2, ...... }); 

post jest stary, ale nadzieję, że może to pomóc innym ..

0

W moim przypadku; Było to z powodu kultury;

dostawca członkostwa do tworzenia kont za pomocą funkcji CreateUserAndAccount, najpierw utwórz użytkownika. na razie jest ok, a użytkownik został pomyślnie dodany do bazy danych. Ale do tworzenia konta, Biegnie poniższego zapytania, aby uzyskać identyfikator użytkownika, aby utworzyć nowe konto dla niego:

SELECT [userID] from [User] Where (UPPER([userName]) = @0); 

Oto gdzie wyjątek rzucony ponieważ w niektórych kultury górnej obudowie litery jest inny, na przykład w Tureckiej wielkie litery dla "i" to "İ".

Nie wiem, jak rozwiązać ten problem w tej chwili, a postaram się go nauczyć.

W moim przypadku utworzyłem użytkownika o nazwie "admin" i rzut wyjątku. Zmieniam nazwę użytkownika na "mesut" I działa poprawnie.

upewnij się, czy masz kulturę konkretne litery w polu Nazwa użytkownika. (Lub e-mail w Twoim przypadku), (jak tylko znalazłem jak go rozwiązać będę je zamieszczać tutaj)

Powiązane problemy