我正在爲基於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