私は.Net/MVC3に比較的慣れておらず、デフォルトのメンバーシッププロバイダーを利用するC#、MVC3、EF4アプリケーションに取り組んでいます。私の読書から、それは自動的に重複した電子メールを捕らえるはずです、しかしそれはそうしないようです、そして私は理由がわかりません。私が本当に理解する必要があるのは、適切な部分が配置されているかどうかを確認する場所と、その検証チェックを実行しない理由(重複のように、他のほとんど/すべてを実行するようです)です。ユーザー名、または無効なパスワード形式など、重複する電子メールのみが捕捉されない。)
カスタマイズには、特定の役割への新しいユーザーの追加、および「初めて」のウェルカムページへのリダイレクトが含まれます。
コードは次のとおりです。
// POST: /Account/Register
[HttpPost]
public ActionResult Register(RegisterModel model)
{
if (ModelState.IsValid)
{
// Attempt to register the user
MembershipCreateStatus createStatus;
Membership.CreateUser(model.UserName, model.Password, model.Email, null, null, true, null, out createStatus);
if (createStatus == MembershipCreateStatus.Success)
{
FormsAuthentication.SetAuthCookie(model.UserName, false /* createPersistentCookie */);
Roles.AddUserToRole(model.UserName, "Registered");
//return RedirectToAction("Index", "Home");
return RedirectToAction("Acceptance", "Account");
}
else
{
ModelState.AddModelError("", ErrorCodeToString(createStatus));
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
(手つかずの)検証方法は次のとおりです。
#region Status Codes
private static string ErrorCodeToString(MembershipCreateStatus createStatus)
{
// See http://go.microsoft.com/fwlink/?LinkID=177550 for
// a full list of status codes.
switch (createStatus)
{
case MembershipCreateStatus.DuplicateUserName:
return "User name already exists. Please enter a different user name.";
case MembershipCreateStatus.DuplicateEmail:
return "A user name for that e-mail address already exists. Please enter a different e-mail address.";
等