在ASP.NET Membership中,为什么resetPassword会导致“指定的方法不受支持”错误?

时间:2012-09-05 19:33:14

标签: c# asp.net-membership asp.net-mvc-4

使用System.Web.Security;

我正在MVC4中创建一个resetPassword表单:

using System.Web.Security;

[HttpPost]
[AllowAnonymous]
public ActionResult ResetPassword(ResetPasswordModel model)
{
    MembershipUser u = Membership.GetUser(model.Username);

    if (HashResetParams(u.UserName, u.ProviderUserKey.ToString()) == model.Key)
    {
        string resetCode = u.ResetPassword();
        u.ChangePassword(resetCode, model.Password);
    }

    return View("ChangePasswordSuccess");
}

当我点击这条线时,我知道为什么我收到“ResetPassword-指定方法不受支持”错误:

string resetCode = u.ResetPassword();

我想知道它是否与MVC4项目默认使用SimpleMembership实现有关。

另外,我已经看到了有关如何在ASP.NET成员资格中重置密码的各种方法,也许还有更好的方法?

2 个答案:

答案 0 :(得分:20)

尝试使用:

string token = WebSecurity.GeneratePasswordResetToken(userName);
WebSecurity.ResetPassword(token, newPassword);

答案 1 :(得分:1)

如果您使用的是SimpleMembershipProvider,那么是:

  

按照设计,SimpleMembershipProvider类不实现   ASP.NET成员资格中可以使用的全部功能   提供者,由MembershipProvider类中定义的   所有ASP.NET成员资格提供者有些成员可以参加   class因为它们是从基类继承的,但会抛出   如果你访问它们就是一个例外。

另一种方法是使用SqlMembershipProvider

你的web.config应该有类似的东西:

<membership defaultProvider="SqlProvider"
      userIsOnlineTimeWindow="15">
      <providers>
        <add 
          name="SqlProvider" 
          type="System.Web.Security.SqlMembershipProvider" 
          connectionStringName="SqlServices"
          applicationName="MyApplication"
          enablePasswordRetrieval="false"
          enablePasswordReset="true"
          requiresQuestionAndAnswer="true"
          requiresUniqueEmail="false"
          passwordFormat="Hashed"
          maxInvalidPasswordAttempts="5"
          passwordAttemptWindow="10" />
      </providers>
    </membership>