2013-05-19 63 views
3

使用MVC4同步到一個MySQL服務器。通過更改machine.config併成功使用ASP.net配置工具創建用戶,它是否成功?然而,當我登錄與我創建使用工具(並且是在數據庫中)用戶名我得到這個錯誤Membership.Provider for asp.net問題

System.InvalidOperationException was unhandled by user code 
Message=To call this method, the "Membership.Provider" property must be an instance of "ExtendedMembershipProvider". 
Source=WebMatrix.WebData 
StackTrace: 
    at WebMatrix.WebData.WebSecurity.VerifyProvider() 
    at WebMatrix.WebData.WebSecurity.Login(String userName, String password, Boolean persistCookie) 
    at KHSWebsite.Controllers.AccountController.Login(LoginModel model, String returnUrl) in c:\users\alex\documents\visual studio 2010\Projects\KHSWebsite\KHSWebsite\Controllers\AccountController.cs:line 38 
    at lambda_method(Closure , ControllerBase , Object[]) 
    at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) 
    at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) 
    at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass42.<BeginInvokeSynchronousActionMethod>b__41() 
    at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _) 
    at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End() 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass37.<>c__DisplayClass39.<BeginInvokeActionMethodWithFilters>b__33() 
    at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49() 
InnerException: 

這是一個全新的數據庫與VS2010新鮮MVC4剃刀網站。有什麼想法嗎?

UPDATE: 這裏是我的web.config

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
<configSections> 
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
</configSections> 
<connectionStrings> 
    <remove name="LocalMySqlServer"/> 
    <add name="LocalMySqlServer" 
    connectionString="Datasource=localhost;Database=KHS;uid=root;pwd=power1739;" 
    providerName="MySql.Data.MySqlClient"/> 
</connectionStrings> 
<appSettings> 
    <add key="webpages:Version" value="2.0.0.0" /> 
    <add key="webpages:Enabled" value="false" /> 
    <add key="PreserveLoginUrl" value="true" /> 
    <add key="ClientValidationEnabled" value="true" /> 
    <add key="UnobtrusiveJavaScriptEnabled" value="true" /> 
    <add key="enableSimpleMembership" value="true" /> 
</appSettings> 
    <system.web> 
    <roleManager defaultProvider="MySQLRoleProvider"/> 
    <membership defaultProvider="MySQLMembershipProvider" /> 
    <compilation debug="true" targetFramework="4.0" /> 
    <authentication mode="Forms"> 
    <forms loginUrl="~/Account/Login" timeout="2880" /> 
    </authentication> 
    <pages> 
    <namespaces> 
     <add namespace="System.Web.Helpers" /> 
     <add namespace="System.Web.Mvc" /> 
     <add namespace="System.Web.Mvc.Ajax" /> 
     <add namespace="System.Web.Mvc.Html" /> 
     <add namespace="System.Web.Optimization" /> 
     <add namespace="System.Web.Routing" /> 
     <add namespace="System.Web.WebPages" /> 
    </namespaces> 
    </pages> 
</system.web> 
<system.webServer> 
<validation validateIntegratedModeConfiguration="false" /> 
<modules runAllManagedModulesForAllRequests="true" /> 
<handlers> 
    <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" /> 
    <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" /> 
    <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> 
    <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" /> 
    <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" /> 
    <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> 
</handlers> 
</system.webServer> 
<runtime> 
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
    <dependentAssembly> 
    <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" /> 
    <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" /> 
    </dependentAssembly> 
    <dependentAssembly> 
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" /> 
    <bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.0.0.0" /> 
    </dependentAssembly> 
    <dependentAssembly> 
    <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" /> 
    <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" /> 
    </dependentAssembly> 
</assemblyBinding> 
</runtime> 
<entityFramework> 
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> 
</entityFramework> 
</configuration> 
+1

你見過以下內容:http://www.asp.net/web-pages/tutorials/security/16-adding-security-and-membership?查找開始的部分:_「注意:如果您看到一個錯誤,告訴您一個屬性必須是ExtendedMembershipProvider的實例」_希望有幫助。 –

+1

...以及一些可能有所幫助的其他疑難解答詳細信息可以在此處找到:http://social.msdn.microsoft.com/Forums/en-US/windowsazuredevelopment/thread/d352bb1b-577c-42b7-8872-5ed59cd65f32/ –

+0

仍然沒有好,試過但同樣的錯誤 – Badmiral

回答

3

Asp.Net MVC簡單成員資格與正常的Web表單成員資格提供程序不一樣。檢查以下blog post。從鏈接文章

  • SimpleMembership與以前的會員系統整合,但你不能使用的MembershipProvider與SimpleMembership
  • ASP.NET 4.5 Web窗體不使用SimpleMembership;它實現了對OAuth的ASP.NET成員

參見下面的圖像的頂部: Membership Provider Class Diagram

從例外,據瞭解,您的供應商是classic membership provider,它不是簡單的與兼容的成員。

"Membership.Provider" property must be an instance of "ExtendedMembershipProvider". 

你可以看看下面的post1post2對MySQL的兼容Asp.Net MVC簡單的會員供應商。

2

可以定義爲defaultProviderroleManagermembership你還必須添加提供商他們。像這樣

<membership defaultProvider="MySqlMembershipProvider"> 
     <providers> 
      <clear/> 
      <add name="MySqlMembershipProvider" 
        type="MySql.Web.Security.MySQLMembershipProvider, mysql.web" 
        connectionStringName="LocalMySqlServer" 
        enablePasswordRetrieval="false" 
        enablePasswordReset="true" 
        requiresQuestionAndAnswer="false" 
        requiresUniqueEmail="true" 
        passwordFormat="Hashed" 
        maxInvalidPasswordAttempts="5" 
        minRequiredPasswordLength="6" 
        minRequiredNonalphanumericCharacters="0" 
        passwordAttemptWindow="10" 

        applicationName="/" 
        autogenerateschema="true"/> 
     </providers> 
    </membership> 

    <roleManager enabled="true" defaultProvider="MySqlRoleProvider"> 
     <providers> 
      <clear /> 
      <add connectionStringName="LocalMySqlServer" 
       applicationName="/" 
       name="MySqlRoleProvider" 
       type="MySql.Web.Security.MySQLRoleProvider, mysql.web" 
       autogenerateschema="true"/> 
     </providers> 
    </roleManager> 

查看this瞭解更多信息。