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;
        }
}

我究竟做错了什么?(我对此很陌生)。

4

2 回答 2

4

当您创建自定义提供程序时,尤其是在 Visual Studio 下,Intellisense 将使用以下内容填充覆盖成员的内容:

throw new NotImplementedException();

您可能知道,从抽象类(例如类)继承时,RoleProvider必须实现该类的所有抽象成员。Visual Studio 选择何时覆盖成员,默认情况下填写上述代码。保持原样将允许您的项目在实现后构建,但在运行时您会收到异常,因为 .net 框架将调用一些引发异常的方法。

您需要做的是删除 throw 语句并实现该方法或属性的逻辑。因此,对于IsUserInRole方法,您将检查您正在使用的任何用户存储(SQL 数据库、XML 文件等),如果用户处于角色中,则返回 true,否则返回 false。

于 2009-12-09T18:45:28.917 回答
0

NotImplementedExceptionRoleExists方法中抛出了一个。暂时更改为return true;,一切都会好起来的。

于 2009-12-09T18:29:14.687 回答