0

这是一个 MVC 4 Internet 应用程序。我已经在 Web.config 文件中将 Role Provider 和 Role Manager 设置为 SimpleRoleProvider 和 SimpleMembershipProvider ,但我继续得到“在调用“WebSecurity”类的任何其他方法之前必须调用“WebSecurity.InitializeDatabaseConnection”方法”尽管在 Global,asax.cs 文件中初始化了 WebSecurity.InitializeDatabaseConnection 异常。我知道这已正确初始化,因为我创建并以编程方式分配的授权属性中的角色属性工作完美。我要做的就是检索用户用户名,如果他们忘记并且无法登录,则通过电子邮件将其发送给他们。建议表示赞赏。

    [HttpPost]
    [CaptchaVerify("Captcha is not valid")]
    [AllowAnonymous]
    public ActionResult ForgotUserNameOrPassword(UserProfile model, FormCollection collection)
    {

        if (!ModelState.IsValid)
        {
            ViewBag.Error = "The Captcha answer is incorrect";
            return View();
        }
        else
        {


            SimpleMembershipProvider mySMP = new SimpleMembershipProvider();

            int outRecs;

            dynamic email = new Postal.Email("UserNameEmail");


            MembershipUserCollection myUserCol =mySMP.FindUsersByEmail(model.UserEmail, 0, 0, out outRecs);

            email.Username = myUserCol;
            email.To = model.UserEmail;
            email.From = model.UserEmail;
            email.Send();

            return View("../Account/Login");

        }
    }
4

1 回答 1

1

即使您确实正确调用了 InitializeDatabaseConnection ,它也不适用于SimpleMembershipProvider.FindUsersByEmail。这是此方法的文档中的注释。

如果 SimpleMembershipProvider 类已使用对 WebSecurity.InitializeDatabaseConnection() 方法的调用进行了初始化,则此方法不受支持并且将引发 NotSupportedException 异常。但是,如果尚未调用 WebSecurity.InitializeDatabaseConnection() 方法,并且您已将站点配置为使用标准 ASP.NET 成员资格提供程序,则此方法将传递给标准成员资格提供程序。有关详细信息,请参阅 SimpleMembershipProvider 类概述。

鉴于文档,您所经历的没有任何意义。究竟是在哪里抛出异常?当您调用 FindUsersByEmail 时?

2013 年 6 月 28 日更新

SimpleMembershipProvider 没有实现所有标准的提供者方法。如果缺少一种方法,您有几个选择。首先,您可以创建自己的自定义 SimpleMembershipProvider,它从具有您需要的方法的原始版本派生而来。或者,您可以扩展 WebSecurity 类以包含您需要的方法。看看SimpleSecurity开源项目,它将SimpleMembership 与 ASP.NET MVC 应用程序分离。本文介绍如何扩展 WebSecurity 类并直接查询数据库。您可以执行类似的操作并通过电子邮件地址查询特定用户。

但 SimpleMembership 不支持开箱即用地存储用户电子邮件地址。查看这篇文章,了解如何自定义 SimpleMembership 以包含电子邮件地址

还要记住,基本成员资格提供程序返回多个用户的电子邮件地址的原因是该架构不限制用户使用相同的电子邮件地址开设多个帐户,除非该电子邮件地址用作用户名。

于 2013-06-27T19:31:46.203 回答