gpt4 book ai didi

authentication - 错误 "Membership.Provider"属性必须是 "ExtendedMembershipProvider"的实例

转载 作者:行者123 更新时间:2023-12-04 04:31:46 24 4
gpt4 key购买 nike

我将 SimpleMembership 用于基于 ASP.NET MVC4 的应用程序。我通过在互联网上关注一些博客来设置身份验证机制。仅作为背景,以下是亮点:

• 我有一个初始化成员资格的类“InitializeSimpleMembershipAttribute”。确保在第一次调用 WebSecurity 类的任何方法之前调用它。

• 我有一个SeedData 类,它成功地利用WebSecurity 创建了默认用户和角色(DB 获取了默认数据)。

• 当前状态下的应用程序允许用户登录并使用他有权访问的功能。因此,我认为我们可以说 SimpleMembership 设置正确并且可以正常工作。

• 现在我正在添加“重置密码”功能。我关注了几个博客,例如

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

我已经实现了基本的东西( View 和逻辑),但是当我调用
WebSecurity.GeneratePasswordResetToken(userName);

我得到以下异常。

To call this method, the "Membership.Provider" property must be an instance of "ExtendedMembershipProvider". Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. Exception Details: System.InvalidOperationException: To call this method, the "Membership.Provider" property must be an instance of "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="true"以确保全局配置不会覆盖我的配置。

尝试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:
至少阅读了 google 上的前 10 个帮助链接和 SO 上的 5 个似乎与此主题相关的答案,例如
To call this method, the "Membership.Provider" property must be an instance of "ExtendedMembershipProvider"
实际上不明白他是如何通过答案中提到的原因解决错误的。 “ActionExecutingContext”不在“System.Web.Http”中。

你们中的任何人都可以建议我可以尝试摆脱这个异常(exception)的其他事情吗?

我知道这应该对我有用,只是对时间> 2 小时感到恼火我不得不浪费解决此类问题(当时使用 SimpleMembership 并使用我自己的身份验证机制进行报废)。

更新:问题已经解决了。解决此异常的更改是,我在我的业务层项目中引用了 WebMatrix.WebData 程序集版本 1.0,我将其替换为程序集版本 2.0。我在其他项目程序集 (DAL) 中也使用了 2.0 版程序集。

我比较了 WebMatrix.WebData 程序集的两个版本,但是在所讨论的代码中没有发现任何差异。所以不确定为什么它无法将提供者强制转换为“ExtendedMembershipProvider”?

是否与其他项目,尤其是 Web 项目正在加载 2.0 版和正在制作的业务层有关 WebSecurity.GeneratePasswordResetToken寻找 1.0 程序集,它可能会导致问题?在那种情况下,我不应该从异常中得到警告或其他帮助吗?

提前致谢 > Shailendra

最佳答案

解决此异常的更改是,我在我的业务层项目中引用了 WebMatrix.WebData 程序集版本 1.0,我将其替换为程序集版本 2.0。

当我比较 WebMatrix.WebData 程序集的两个版本时,我找不到相关代码的任何差异。

然而,我已经在另一个项目程序集 (DAL) 中使用了 2.0 版程序集这一事实。

因此,虽然我不是 100% 确定我的理论是,但在运行时检查提供程序时,由于冲突,它无法加载正确的程序集(一个版本已经加载,在 DAL 项目中引用,当调用第二个项目方法时,它引用了一个相同程序集的不同版本),它显示通用异常消息。

关于authentication - 错误 "Membership.Provider"属性必须是 "ExtendedMembershipProvider"的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18052193/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com