10

asp.netは初めてです。簡単なログインを作成し、Webページを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

4 に答える 4

5

私はちょうど同じ問題を抱えていました...私は使用していました

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, ...... });

投稿は古いですが、これが他の人に役立つことを願っています。

于 2013-10-24T10:27:36.080 に答える
4

必ず:

  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を返し、アクション名とコントローラー名を渡す必要があります。

于 2013-02-14T17:54:05.507 に答える
0

私はちょうどこの問題を抱えていました-しかしあなたのコードによってそれは同じことではないかもしれません。自分のユーザーテーブルにレコードを作成する前に、メンバーシップレコードを作成しようとしていました。それは逆でなければなりません。

だから私はあなたのINSERT INTO UserDataクエリが実際に機能していたことを確認します。

于 2013-02-06T11:04:01.637 に答える
0

私の場合; それは文化のせいでした。

CreateUserAndAccount関数を使用してアカウントを作成するためのメンバーシッププロバイダーは、最初にユーザーを作成します。今のところ問題はなく、ユーザーはデータベースに正常に追加されました。ただし、アカウントを作成する場合は、以下のクエリを実行してuserIDを取得し、新しいアカウントを作成します。

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

ここで例外がスローされます。これは、一部の文化では大文字が異なるためです。たとえば、トルコ語では、「i」の大文字は「İ」です。

今のところこの問題を解決する方法がわからないので、学ぼうと思います。

私の場合、「admin」という名前のユーザーを作成し、例外をスローしていました。ユーザー名を「mesut」に変更すると、正常に実行されます。

userNameフィールドに文化固有の文字があるかどうかを確認してください(またはあなたの場合は電子メール)(解決方法が見つかったらすぐにここに投稿します)

于 2014-02-12T10:24:50.780 に答える