【问题标题】:Encountering error 'The Provider encountered an unknown error' while trying WebSecurity.CreateAccount in asp.net webpage在 asp.net 网页中尝试 WebSecurity.CreateAccount 时遇到错误“提供程序遇到未知错误”
【发布时间】:2013-01-01 19:45:39
【问题描述】:

我是 asp.net 的新手。我正在尝试使用 WebMatrix 创建一个简单的登录和注册网页。但是当我尝试创建帐户时出现以下错误:


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

感谢任何帮助。谢谢。

【问题讨论】:

  • 可能问题出在您的 InitializeDatabaseConnection 方法中。可以发一下吗?

标签: asp.net razor webmatrix


【解决方案1】:

我只是遇到了同样的问题...我正在使用

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

及以上产生的问题..

然后我尝试了:

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

并发现我缺少用户表 (UserProfile) 的其他必填字段。以下对我有用:

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

帖子很旧,但希望这可以帮助其他人..

【讨论】:

    【解决方案2】:

    就我而言;那是因为文化;

    使用 CreateUserAndAccount 函数创建帐户的 Membership 提供者,首先创建一个用户。现在没问题,用户成功添加到数据库中。 但是对于创建帐户,它会运行以下查询来获取用户 ID 来为其创建新帐户:

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

    这里是抛出异常的地方,因为在某些文化中,大写字母是不同的,例如在土耳其语中,“i”的大写是“İ”。

    我暂时不知道如何解决这个问题,我会努力学习。

    在我的例子中,我创建了一个名为“admin”的用户并抛出异常。我把用户名改成“mesut”,就运行成功了。

    请确保您在用户名字段中是否有特定文化的字母。(或在您的情况下使用电子邮件),(一旦我找到解决方法,我将在此处发布)

    【讨论】:

      【解决方案3】:

      请务必:

      1. 先创建用户记录
      2. 调用 WebMatrix 创建用户帐户。

      以下是我的代码,它解决了您遇到的相同问题:

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

      另外,您不希望 Respoonse.Redirect 到 .cshtml 文件。相反,您应该返回一个 RedirectToAction 并传入 Action 和 Controller 名称。

      【讨论】:

        【解决方案4】:

        我刚刚遇到了这个问题 - 但根据您的代码,它可能不是一回事。在我自己的用户表中创建记录之前,我试图创建成员记录。它必须是相反的。

        所以我会检查您的 INSERT INTO UserData 查询是否确实有效。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-08-30
          • 1970-01-01
          • 2022-10-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多