2013-04-01 114 views
38

當前每當我嘗試使用默認成員身份服務註冊用戶或登錄時,我的主機提供商DiscountASP I上的ASP.Net MVC4收到錯誤要調用此方法,「Membership.Provider」屬性必須是「ExtendedMembershipProvider」的實例

To call this method, the "Membership.Provider" property must be an instance of "ExtendedMembershipProvider".

這不會發生在本地。

這是我InitializeSimpleMembershipAttribute.cs

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = false, Inherited = true)] 
public sealed class InitializeSimpleMembershipAttribute : ActionFilterAttribute 
{ 
    private static SimpleMembershipInitializer _initializer; 
    private static object _initializerLock = new object(); 
    private static bool _isInitialized; 

    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     // Ensure ASP.NET Simple Membership is initialized only once per app start 
     LazyInitializer.EnsureInitialized(ref _initializer, ref _isInitialized, ref _initializerLock); 
    } 

    private abstract class SimpleMembershipInitializer 
    { 
     protected SimpleMembershipInitializer() 
     { 
      Database.SetInitializer<UsersContext>(null); 

      try 
      { 
       using (var context = new UsersContext()) 
       { 
        if (!context.Database.Exists()) 
        { 
         // Create the SimpleMembership database without Entity Framework migration schema 
         ((IObjectContextAdapter)context).ObjectContext.CreateDatabase(); 
        } 
       } 

       WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true); 
      } 
      catch (Exception ex) 
      { 
       throw new InvalidOperationException("The ASP.NET Simple Membership database could not be initialized. For more information, please see http://go.microsoft.com/fwlink/?LinkId=256588", ex); 
      } 
     } 
    } 
} 

以下是錯誤的全屏截圖:

有誰知道我怎麼能解決這個問題或知道解決它的文章?

+1

,你能否告訴'' web.config中的一部分?看起來你試圖使用SimpleMembership,但提供者不匹配。另外,確保'WebMatrix。*'在參考'屬性下設置爲'Copy Local = True'。 –

+0

我實際上沒有在我的Web.config中出於某種原因定義的成員資格部分。你能讓我知道它應該是什麼樣子嗎? –

回答

63

嘗試<system.web>節點中設置以下在你web.config

<roleManager enabled="true" defaultProvider="SimpleRoleProvider"> 
     <providers> 
      <clear /> 
      <add name="SimpleRoleProvider" type="WebMatrix.WebData.SimpleRoleProvider, WebMatrix.WebData" /> 
     </providers> 
    </roleManager> 
    <membership defaultProvider="SimpleMembershipProvider"> 
     <providers> 
      <clear /> 
      <add name="SimpleMembershipProvider" type="WebMatrix.WebData.SimpleMembershipProvider, WebMatrix.WebData" /> 
     </providers> 
    </membership> 
    <sessionState mode="InProc" customProvider="DefaultSessionProvider"> 
     <providers> 
      <add name="DefaultSessionProvider" type="System.Web.Providers.DefaultSessionStateProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="DefaultConnection" /> 
     </providers> 
    </sessionState> 

聽起來就像當你去使用它無法識別SimpleMembership。

而且,它可能是值得包括,在WebMatrix.webData庫可以通過的NuGet安裝:

PM> Install-Package Microsoft.AspNet.WebPages.WebData 
+0

謝謝,這工作得很好! –

+0

很高興幫助! ;-) –

+0

在代碼的第四行中,我收到了服務器錯誤:「無法加載文件或程序集」WebMatrix.WebData「或它的一個依賴項,系統找不到指定的文件。原因是什麼? – pt12lol

1

我有同樣的錯誤,但對我來說是100%的引用。我無法讓WebMatrix.WebSecurity多次工作......每次都是因爲我沒有使用MVC 4 Internet模板創建項目。

關鍵是引用和配置默認在模板中工作,所以只需重新創建您的項目,它會沒事的。

我的修復程序是: 1.將我的項目備份到另一個文件夾。 2.檢出所有文件 3.以完全相同的名稱創建一個新的MVC 4 Internet項目。 4.複製+粘貼(覆蓋)原始項目。 5.添加任何缺少的引用,更改的路由,.config設置/數據庫連接。

+0

你是什麼意思'internet template'?默認情況下,Visual Studio中的mvc 4項目模板不起作用? –

+0

哦,我想你的意思是選擇本地的ASP.NET MVC 4項目模板,然後在下一個屏幕上選擇「Internet應用程序」。我對嗎?我只是想澄清一下,因爲我最初的想法是,你找到了一個mvc的在線項目模板並安裝了它。 –

3

以上步驟,但沒有幫助。是什麼幫助被改變的web.config:

 <dependentAssembly> 
    <assemblyIdentity name="WebMatrix.Data" publicKeyToken="31bf3856ad364e35" culture="neutral" /> 
    <bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.0.0.0" /> 
    </dependentAssembly> 
      <dependentAssembly> 
    <assemblyIdentity name="WebMatrix.WebData" publicKeyToken="31bf3856ad364e35" culture="neutral" /> 
    <bindingRedirect oldVersion="0.0.0.0-3.1.0.0" newVersion="3.0.0.0" /> 
    </dependentAssembly> 
6

試圖改變AccountController.cs

下的登錄功能
 // 
    // POST: /Account/Login 

    [AllowAnonymous] 
    [HttpPost] 
    public ActionResult Login(LoginModel model, string returnUrl) 
    { 
     if (ModelState.IsValid) 
     { 
      if (Membership.ValidateUser(model.UserName, model.Password)) 
      { 
       FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe); 
       if (Url.IsLocalUrl(returnUrl)) 
       { 
        return Redirect(returnUrl); 
       } 
       else 
       { 
        return RedirectToAction("Index", "Home"); 
       } 
      } 
      else 
      { 
       ModelState.AddModelError("", "The user name or password provided is incorrect."); 
      } 
     } 

     // If we got this far, something failed, redisplay form 
     return View(model); 
    } 
+0

感謝兄弟,其作品 – yozawiratama

+0

正確!這對於從aspx頁面遷移到MVC的任何人來說都是一個很好的解決方案! – TomO

相關問題