2012-09-05 55 views
3

using System.Web.Security;在ASP.NET Membership中,爲什麼resetPassword會導致「不支持指定方法」錯誤?

我在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(); 

我不知道它是否與默認使用SimpleMembership實現的MVC4項目有關。

此外,我已經看到了如何重置ASP.NET Membership中的密碼的各種方法,也許有更好的方法?

+0

驗證'在web.config中的add-provider標記中啓用PasswordReset =「true」。 –

回答

1

如果您使用的是SimpleMembershipProvider則是:

在設計上,SimpleMembershipProvider類沒有實現 全方位的功能,可以在ASP.NET成員 提供商,如定義的MembershipProvider所有ASP.NET成員資格提供程序使用的所有類都由 使用。有些成員在 類中可用,因爲它們是從基類繼承而來的,但是如果您訪問它們,將會拋出 異常。

另一種方法是使用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> 
+0

感謝Josh-默認的MVC4項目使用賬戶控制器上的[InitializeSimpleMembership]屬性。我刪除了,並設置我的web.config section = 。我仍然收到錯誤信息,你知道我還需要指定會員提供商嗎?非常感謝 –

+1

您需要確保提供商實際註冊。 defaultProvider只是一個命名提供者。所以它可以說「鮑勃」或「富」。重要的是,您實際上已經使用SQL成員資格提供程序配置了提供程序。 – Josh

+0

嘿Josh-我的ASP.NET配置表明我正在使用SqlMembershipProvider。如果你能想到其他東西,請告訴我。非常感謝! –

20

嘗試:

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

謝謝!我會試一試。 –

+5

這應該是答案。 – Pinch

+0

謝謝!這工作完美。我同意Pinch,這就是答案。 – KennyJacobson

相關問題