我的自定义成员资格提供程序“不实现继承的抽象成员'System.Web.Security.MemberProvider.
本文关键字:成员 抽象 System MemberProvider Security Web 继承 实现 自定义 程序 我的 | 更新日期: 2023-09-27 18:34:35
我正在尝试创建自定义的MemberProvider,所以我创建了一个名为CustomMemberhsipProvider
的类,并使其继承自MembershipProvider
:
namespace Solution.Models
{
public class CustomMembershipProvider : MembershipProvider
{
public bool CheckPassword(string password, string SaltedHash)
{
//code
}
public string CreateHash(string saltAndPassword)
{
//code
}
public string GetUserRoles(string userName)
{
//more code etc.
}
}
}
然后我在web.config
文件中引用了它,如下所示:
<membership defaultProvider="CustomMembershipProvider">
<providers>
<clear />
<add name="CustomMembershipProvider" type="Solution.Models.CustomMembershipProvider" enablePasswordRetrieval="false" maxInvalidPasswordAttempts="3" passwordAttemptWindow="10" applicationName="/"/>
</providers>
</membership>
问题:我收到无数运行时错误,告诉我CustomMembershipProvider does not implement inherited abstract member MembershipProvider.ApplicationName.get / MembershipProvider.ApplicationName.set / MembershipProvider.ChangePassword(string, string, string) etc.
问:这里到底发生了什么?CustomMembershipProvider
不应该继承MembershipProvider
的所有属性和功能而不进行任何额外的工作吗? 我错过了一些简单的东西吗?
对此进行了一些研究,并且根据此答案,我假设问题是Visual Studio会自动用throw new NotImplementedException();
填充CustomMembershipProvider
中缺少的每个属性。 然而,这个特定的答案并没有帮助我解决问题。
我很确定这些是编译时错误,而不是您看到的运行时错误。
MembershipProvider
是一个抽象类,为了创建抽象类的具体实现,您必须(至少(为其所有抽象成员提供实现。你的类只有三个显式成员(没有一个实现MembershipProvider
的抽象成员(,而根据我的统计,MembershipProvider
有 27 个抽象成员,所以你至少缺少 27 个成员。
MSDN 有一篇关于如何实现自定义成员资格提供程序的文章,其中包含以下文本:
下表列出了必须从 ProviderBase 和 MemberProvider 抽象类实现的必需属性和方法,以及每个属性和方法的说明。若要查看每个成员的实现,请参阅为示例成员资格提供程序实现提供的代码。
后面是一个很长的属性和方法表。
除了上面的文章,我还建议阅读抽象类,因为你似乎不太清楚继承抽象类需要什么。
下面是一些有用的文章,其中包含有关使用内置功能在 ASP.NET 中设置标识的信息(TYPE CAST EXCEPTION 博客有几篇关于 ASP.NET 标识的不同文章(。
将具有成员资格、OAuth 和 SQL 数据库的安全 ASP.NET MVC 5 应用部署到 Azure 网站
在VS 2013模板中自定义 ASP.NET 身份中的配置文件信息
类型转换异常 - ASP.NET MVC 和标识 2.0:了解基础知识