在asp.net网页中尝试WebSecurity.CreateAccount时遇到错误'提供程序遇到了未知错误'

时间:2013-01-18 05:52:55

标签: asp.net razor webmatrix

我是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

感谢任何帮助。感谢。

4 个答案:

答案 0 :(得分:4)

请务必:

  1. 首先创建用户记录
  2. 调用WebMatrix以创建用户帐户。
  3. 以下是我的代码,它解决了您遇到的同一问题:

    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名称。

答案 1 :(得分:4)

我刚遇到同样的问题......我正在使用

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

及以上生成的问题..

然后我尝试了:

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

并发现我错过了我的Users表的其他必填字段(UserProfile)。以下为我工作:

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

这篇文章很老了,但希望这可以帮助别人..

答案 2 :(得分:0)

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

因此,我会检查您的INSERT INTO UserData查询是否确实有效。

答案 3 :(得分:0)

在我的情况下;这是因为文化;

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

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

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

我暂时不知道如何解决这个问题,我会尝试去学习它。

在我的情况下,我创建了一个名为“admin”和异常抛出的用户。我将用户名更改为“mesut”并且运行成功。

请确保您在userName字段中有特定于文化的字母。(或在您的情况下发送电子邮件),(一旦我找到解决方法,我会在此处发布)