我的自定义会员资格提供程序"does not implement inherited abstract member 'System.Web.Security.MembershipProvider.



我正在尝试创建自定义的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:了解基础知识

相关内容

最新更新