Membership.Provider在asp.net mysql的问题 [英] Membership.Provider for mysql in asp.net issue

查看:325
本文介绍了Membership.Provider在asp.net mysql的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用MVC4同步到MySQL服务器。难道它成功地通过改变在machine.config并成功地运用了ASP.net配置工具来创建用户。然而,当我登录与我创建使用工具(并且是在数据库中)我得到这个错误

 系统用户名.InvalidOperationException是由用户代码
消息未处理=要调用此方法时,Membership.Provider属性必须是ExtendedMembershipProvider的一个实例。
来源= WebMatrix.WebData
堆栈跟踪:
在WebMatrix.WebData.WebSecurity.VerifyProvider()
在WebMatrix.WebData.WebSecurity.Login(用户名字符串,字符串密码,布尔persistCookie )
在KHSWebsite.Controllers.AccountController.Login(LoginModel型号,串RETURNURL)在C:\users\alex\documents\visual工作室2010\Projects\KHSWebsite\KHSWebsite\Controllers\\ \\AccountController.cs:38行
在lambda_method(封闭,ControllerBase,对象[])在System.Web.Mvc.ActionMethodDispatcher.Execute
(ControllerBase控制器,对象[]参数)
。在System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext,IDictionary`2参数)
在System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext,ActionDescriptor actionDescriptor,IDictionary`2参数)
。在系统.Web.Mvc.Async.AsyncControllerActionInvoker&所述;方式> c__DisplayClass42&所述; BeginInvokeSynchronousActionMethod方式> b__41()
。在System.Web.Mvc.Async.AsyncResultWrapper&下;> c__DisplayClass8`1&所述。BeginSynchronous> b__7 (IAsyncResult的_)
在System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End()
在System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult的asyncResult)
在System.Web.Mvc.Async.AsyncControllerActionInvoker&下;方式> c__DisplayClass37&所述;> c__DisplayClass39&所述。BeginInvokeActionMethodWithFilters方式> b__33()
。在System.Web.Mvc.Async.AsyncControllerActionInvoker&下;> c__DisplayClass4f < InvokeActionMethodFilterAsynchronously> b__49()
的InnerException:

这是一个新的数据库与新鲜MVC4剃刀网站在VS2010。 ?有什么想法



更新:
这里是我的web.config

 <?XML版本=1.0编码=UTF-8>?; 
<结构>
< configSections>
<节名称=的EntityFrameworkTYPE =System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection,的EntityFramework,版本= 4.4.0.0,文化=中性公钥= b77a5c561934e089requirePermission =FALSE/> ;
< / configSections>
<&是connectionStrings GT;
<清除NAME =LocalMySqlServer/>
<添加名称=LocalMySqlServer
的connectionString =数据源=本地主机;数据库= KHS; UID =根; PWD = power1739;
的providerName =MySql.Data.MySqlClient/>
< /&是connectionStrings GT;
<&的appSettings GT;
<添加键=网页:版本值=2.0.0.0/>
<添加键=网页:启用VALUE =FALSE/>
<添加键=PreserveLoginUrlVALUE =真/>
<添加键=ClientValidationEnabledVALUE =真/>
<添加键=UnobtrusiveJavaScriptEnabledVALUE =真/>
<添加键=enableSimpleMembershipVALUE =真/>
< /的appSettings>
<&的System.Web GT;
< roleManager defaultProvider =MySQLRoleProvider/>
<会员defaultProvider =MySQLMembershipProvider/>
<编译调试=真targetFramework =4.0/>
<身份验证模式=表格>
<形式loginUrl =〜/帐号/登录超时=2880/>
< /认证>
<网页和GT;
<&命名空间GT;
<添加命名空间=System.Web.Helpers/>
<添加命名空间=System.Web.Mvc/>
<添加命名空间=System.Web.Mvc.Ajax/>
<添加命名空间=System.Web.Mvc.Html/>
<添加命名空间=System.Web.Optimization/>
<添加命名空间=System.Web.Routing/>
<添加命名空间=System.Web.WebPages/>
< /命名空间>
< /页>
< /system.web>
< system.webServer>
<验证validateIntegratedModeConfiguration =FALSE/>
<模块runAllManagedModulesForAllRequests =真/>
<&处理GT;
<清除NAME =ExtensionlessUrlHandler-ISAPI-4.0_32bit/>
<清除NAME =ExtensionlessUrlHandler-ISAPI-4.0_64bit/>
<清除NAME =ExtensionlessUrlHandler - 集成 - 4.0/>
<添加名称=ExtensionlessUrlHandler-ISAPI-4.0_32bitPATH =*。动词=GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS模块=IsapiModulescriptProcessor =%WINDIR%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll的前提条件=classicMode,runtimeVersionv4.0,bitness32responseBufferLimit =0/>
<添加名称=ExtensionlessUrlHandler-ISAPI-4.0_64bitPATH =*。动词=GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS模块=IsapiModulescriptProcessor =%WINDIR%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll的前提条件=classicMode,runtimeVersionv4.0,bitness64responseBufferLimit =0/>
<添加名称=ExtensionlessUrlHandler - 集成 - 4.0PATH =*。动词=GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONSTYPE =System.Web.Handlers.TransferRequestHandler前提=integratedMode,runtimeVersionv4.0/>
< /处理器>
< /system.webServer>
<&运行GT;
< assemblyBinding的xmlns =瓮:架构 - 微软COM:asm.v1>
< dependentAssembly>
< assemblyIdentity名称=System.Web.Helpers公钥=31bf3856ad364e35/>
< bindingRedirect oldVersion =1.0.0.0-2.0.0.0NEWVERSION =2.0.0.0/>
< / dependentAssembly>
< dependentAssembly>
< assemblyIdentity名称=System.Web.Mvc公钥=31bf3856ad364e35/>
< bindingRedirect oldVersion =1.0.0.0-4.0.0.0NEWVERSION =4.0.0.0/>
< / dependentAssembly>
< dependentAssembly>
< assemblyIdentity名称=System.Web.WebPages公钥=31bf3856ad364e35/>
< bindingRedirect oldVersion =1.0.0.0-2.0.0.0NEWVERSION =2.0.0.0/>
< / dependentAssembly>
< / assemblyBinding>
< /运行>
<&的EntityFramework GT;
< defaultConnectionFactory TYPE =System.Data.Entity.Infrastructure.SqlConnectionFactory,的EntityFramework/>
< /&的EntityFramework GT;
< /结构>


解决方案

Asp.Net MVC简单的会员资格是不一样的正常的Web表单成员资格提供程序。检查下面的博客文章。从链接的文章




  • SimpleMembership与以前的会员系统整合,但你不能使用的MembershipProvider与SimpleMembership

  • ASP.NET 4.5 Web窗体不使用SimpleMembership;它ASP.NET成员

  • 之上实现的OAuth


请参阅下图:



这是例外,据了解,您的提供商的经典的成员资格提供,这是不兼容用简单的会员。

 Membership.Provider属性必须是ExtendedMembershipProvider的一个实例。 

您可以看一下下面的 POST1 ,的 POST2 了解MySQL的兼容Asp.Net MVC简单籍人员。


Using MVC4 synced to a mysql server. Did it successfully by changing the machine.config and successfully used the ASP.net Configuration Tool to create users. However when I log in with a username that I created using the tool (and is in the database) I get this error

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:

This is a fresh database with a fresh MVC4 Razor web site from VS2010. Any thoughts?

UPDATE: Here is my 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>

解决方案

Asp.Net MVC simple membership is not the same as normal web forms Membership provider. Check following blog post. From linked article

  • SimpleMembership integrates with the previous membership system, but you can't use a MembershipProvider with SimpleMembership
  • ASP.NET 4.5 Web Forms does not use SimpleMembership; it implements OAuth on top of ASP.NET Membership

See also following image:

From exception, it is understood that your provider is classic membership provider and it is not compatible with Simple Membership.

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

You can look to following post1,post2 for MySql compatible Asp.Net MVC Simple Membership provider.

这篇关于Membership.Provider在asp.net mysql的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆