身份验证 – 错误“Membership.Provider”属性必须是“ExtendedM
我使用SimpleMembership作为基于ASP.NET MVC4的应用程序.我通过在互联网上关注几个博客来设置认证机制.仅供以下背景介绍:
?我有一个初始化成员资格的“InitializeSimpleMembershipAttribute”类.确保在首次调用WebSecurity类的任何方法之前调用此方法. ?我有一个SeedData类,可以成功地利用WebSecurity创建默认用户和角色(DB获取默认数据). ?处于当前状态的应用程序允许用户登录并使用他有权访问的功能.因此,我认为我们可以说SimpleMembership设置正确且有效. ?现在我正在添加“ResetPassword”功能.我关注过几个博客,例如 http://www.itorian.com/2013/03/PasswordResetting.html#comment-form 我已经实现了基本的东西(视图和逻辑),但是当我打电话时 我得到以下例外.
我在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,PublicKeyToken=31bf3856ad364e35" connectionStringName="PublicWebsiteDbContext" applicationName="/" /> </providers> </profile> </system.web> 试试1: 试试2: 尝试3: 尝试4: 你们中的任何一个人都可以提出其他我可以尝试摆脱这个例外的事情吗? 我知道这对我来说应该对我有用,并且对时间感到烦恼> 2小时我不得不浪费解决这个问题(使用SimpleMembership并使用我自己的身份验证机制进行废弃处理). 更新:问题解决了.解决此异常的更改是,我在我的业务层项目中引用了WebMatrix.WebData程序集版本1.0,我将其替换为程序集版本2.0.我有其他项目程序集(DAL)中使用的2.0版程序集. 我比较了两个版本的WebMatrix.WebData程序集但是找不到有问题的代码的任何差异.所以不确定为什么它没有将提供者强制转换为“ExtendedMembershipProvider”? 是否与之相关,因为其他项目尤其是Web项目正在加载2.0版,而业务层正在使WebSecurity.GeneratePasswordResetToken查找1.0程序集,这可能会导致问题?在这种情况下,我不应该从例外中获得警告或其他帮助吗? 提前致谢>赛伦德拉 解决方法
解决此异常的更改是,我将其替换为程序集版本2.0.
当我比较两个版本的WebMatrix.WebData程序集时,我找不到有问题的代码的任何差异. 但是,我已经在另一个项目程序集(DAL)中使用了2.0版程序集. 因此,虽然我不是100%确定我的理论,但是在运行时检查提供程序时由于冲突而无法加载正确的程序集(已经加载了一个版本,这在DAL项目中被引用,当第二个项目方法被调用时它引用了不同版本的相同程序集)并显示通用异常消息. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – 如何在OnActionExecuting中获取当前路由信息
- razor – 没有布局参考的ASP.NET默认MVC4应用程序内容页面?
- asp.net-mvc – Redirect和RedirectToAction之间的混淆
- asp.net-mvc – MVC DateTime文本框格式化问题
- asp.net-mvc-3 – MVC 3 Razor EditorTemplate / DisplayTe
- asp.net-mvc – 如何在json post期间发生异常时阻止asp.net
- asp.net-mvc – 如何在ASP.NET控制器中获取“MvcApplicatio
- asp.net – 有没有一种简单的方法可以向DataBound DropDown
- asp.net – 绕过路径遍历过滤器
- asp.net-mvc – 如何在asp.net mvc中检查模型验证错误?