2009-12-09 82 views
3

我需要一些幫助實現asp.net mvc應用程序中的自定義角色提供程序。自定義角色提供程序未實現繼承的抽象成員

的問題是,我得到一些錯誤,如:

MyRoleProvider does not implement inherited abstract member 'System.Web.Security.RoleProvider.RoleExists(string) 

我得到同樣的錯誤其他方法。不過,我對那些實現...

我的web.config有這樣的:

<roleManager enabled="true" defaultProvider="MyCustomProvider"> 
    <providers> 
    <add name="MyCustomProvider" type="MyRoleProvider" /> 
    </providers> 
</roleManager> 

我的自定義角色提供程序是這樣的(我中省略了幾個方法):

public class MyRoleProvider : RoleProvider { 
     public override string ApplicationName { 
       get { throw new NotImplementedException(); } 
       set { throw new NotImplementedException(); } 
     } 
     public override bool RoleExists(string roleName) 
     { 
       throw new NotImplementedException(); 
     } 
     public override bool IsUserInRole(string username, string roleName) 
       return true; 
     } 
} 

我在做什麼錯了? (我對此很新)。

+0

感謝您的答案。到目前爲止我沒有錯,但是我錯過了一大堆成員的實際實現。 – ojcar 2009-12-09 19:33:28

回答

4

當你創建一個定製的提供,特別是在Visual Studio中,智能感知將填補覆蓋成員的內容有:

throw new NotImplementedException(); 

正如你可能知道,從抽象類,如RoleProvider類繼承時,該類的所有抽象成員都必須執行。當你重寫一個成員時,Visual Studio會選擇默認填寫上面的代碼。如果將它保持原樣,將允許項目在實現後生成,但在運行時您將得到異常,因爲.net框架將調用某些引發異常的方法。

你需要做的是去除throw語句並實現該方法或屬性的邏輯。因此,對於IsUserInRole方法,您可以檢查正在使用的用戶存儲(SQL數據庫,XML文件等),如果用戶在角色中則返回true,否則返回false。

0

您在RoleExists方法中投擲NotImplementedException。暫時更改爲return true;,一切都會好起來的。

相關問題