我正在为基于ASP.NET MVC4的应用程序使用SimpleMembership。我通过在互联网上关注几个博客来设置身份验证机制。只是以下背景是亮点:错误“Membership.Provider”属性必须是“ExtendedMembershipProvider”的实例
•我有一个类InitializeSimpleMembershipAttribute初始化成员资格。确保在首次调用WebSecurity类的任何方法之前调用它。
•我有一个SeedData类,它可以成功地使用WebSecurity创建默认用户和角色(数据库获取默认数据)。
•处于当前状态的应用程序允许用户登录并使用他有权访问的功能。因此我认为我们可以说SimpleMembership安装正确并且正常工作。
•现在我添加“ResetPassword”功能。我已经关注了几个博客,例如
http://www.itorian.com/2013/03/PasswordResetting.html#comment-form 和 http://msdn.microsoft.com/en-us/library/webmatrix.webdata.websecurity.resetpassword(v=vs.111).aspx
我已经实现基本的东西(图和逻辑),但是当我做出 WebSecurity.GeneratePasswordResetToken(用户名)的呼叫;
我得到以下异常。
要调用此方法,“Membership.Provider”属性必须是“ExtendedMembershipProvider”的实例。 描述:执行当前Web请求期间发生未处理的异常。请查看堆栈跟踪以获取有关该错误的更多信息以及源代码的位置。 异常详细信息:System.InvalidOperationException:要调用此方法,“Membership.Provider”属性必须是“ExtendedMembershipProvider”的实例。
我在ILSpy看到这是来自WebSecurity.VerifyProvider()方法。但我不明白为什么?
ExtendedMembershipProvider extendedMembershipProvider = Membership.Provider as ExtendedMembershipProvider;
以上内容来自WebSecurity班线必须返回null造成但是这个例外它不应该是作为配置在web.config文件存在,我无处使用未从“ExtendedMembershipProvider扩展任何其他供应商”。
让我向您展示我的web.config,它是根据人们为解决此问题而提出的建议进行了一些修改。
<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>
<httpRuntime targetFramework="4.5" />
<compilation debug="true" targetFramework="4.5" />
<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>
<roleManager enabled="true" defaultProvider="SimpleRoleProvider" lockItem="true">
<providers>
<clear />
<add name="SimpleRoleProvider" type="WebMatrix.WebData.SimpleRoleProvider, WebMatrix.WebData" />
</providers>
</roleManager>
<membership defaultProvider="SimpleMembershipProvider" lockItem="true">
<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="PublicWebsiteDbContext" />
</providers>
</sessionState>
<profile defaultProvider="DefaultProfileProvider">
<providers>
<add name="DefaultProfileProvider" type="System.Web.Providers.DefaultProfileProvider, System.Web.Providers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" connectionStringName="PublicWebsiteDbContext" applicationName="/" />
</providers>
</profile>
</system.web>
尝试1: 设置lockItem上的属性=“真”之上,以确保全球配置不重写我的配置。
尝试2: 有保证的必要配置的成员中存在的“web.config”作为回答下面的问题建议: To call this method, the "Membership.Provider" property must be an instance of "ExtendedMembershipProvider"
尝试3: 新增<add key="enableSimpleMembership" value="true" />
在web.config文件。
尝试4: 已阅读至少谷歌10大帮助链接和5个与此主题相关的SO上的答案,例如 To call this method, the "Membership.Provider" property must be an instance of "ExtendedMembershipProvider" 其实不明白他是如何解决答案中提到的原因的错误。 “ActionExecutingContext”不在“System.Web.Http”中。
你们中的任何一个人可以建议其他的事情,我可以尝试摆脱这种异常请吗?
我知道这应该为我工作,以及只要时间> 2小时,我不得不浪费解决这个问题(在使用SimpleMembership使用我自己的身份验证机制废料点)恼火。
更新:问题解决了。解决此异常的更改是,我在我的业务层项目中引用WebMatrix.WebData程序集版本1.0,我用程序集版本2.0替换它。我有其他项目程序集(DAL)中使用的2.0版程序集。
我比较了两个版本的WebMatrix.WebData程序集,但是在代码中找不到任何区别。因此,不确定为什么它无法将提供程序强制转换为“ExtendedMembershipProvider”?
它可能是相关的,因为其他项目特别是web项目加载2.0版本和业务层正在使WebSecurity.GeneratePasswordResetToken
寻找1.0程序集,它可能会导致问题?在这种情况下,我是否应该得到警告或其他异常帮助?
在此先感谢>赛伦德拉
问题解决了。解决此异常的更改是,我在我的业务层项目中引用WebMatrix.WebData程序集版本1.0,我用程序集版本2.0替换它。我有其他项目程序集(DAL)中使用的2.0版程序集。我想弄明白为什么会有所作为,会在发现时发布。 – SBirthare