我需要一些帮助在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 :(得分:4)
当您创建自定义提供程序时,尤其是在Visual Studio下,Intellisense将使用以下内容填写覆盖成员的内容:
throw new NotImplementedException();
您可能知道,在继承自抽象类(例如RoleProvider
类)时,必须实现该类的所有抽象成员。 Visual Studio在覆盖成员时选择,默认情况下填写上面的代码。保持原样可以让你的项目在实现之后构建,但是在运行时你会得到异常,因为.net框架会调用一些抛出异常的方法。
您需要做的是删除throw语句并实现该方法或属性的逻辑。因此,对于IsUserInRole
方法,您将检查您正在使用的任何用户存储(SQL数据库,XML文件等),如果用户处于角色中则返回true,否则返回false。
答案 1 :(得分:0)
您在NotImplementedException
方法中抛出RoleExists
。暂时改为return true;
,一切都会好的。