我需要一些帮助在 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;
}
}
我做错了什么? (我对此很陌生)。
最佳答案
当您创建自定义提供程序时,尤其是在 Visual Studio 下,Intellisense 将使用以下内容填充覆盖成员的内容:
throw new NotImplementedException();
您可能知道,当从抽象类(例如 RoleProvider
类)继承时,必须实现该类的所有抽象成员。 Visual Studio 选择何时覆盖成员,默认填写以上代码。保持原样将允许您的项目构建,因为它已经实现,但在运行时您会遇到异常,因为 .net 框架将调用一些引发异常的方法。
您需要做的是删除 throw 语句并实现该方法或属性的逻辑。因此,对于 IsUserInRole
方法,您将检查您正在使用的任何用户存储(SQL 数据库、XML 文件等),如果用户在某个角色中则返回 true,否则返回 false。
关于c# - 自定义角色提供者不实现继承的抽象成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1875816/