【问题标题】:My custom MembershipProvider "does not implement inherited abstract member 'System.Web.Security.MembershipProvider.*"我的自定义 MembershipProvider “没有实现继承的抽象成员 'System.Web.Security.MembershipProvider.*”
【发布时间】:2014-12-18 19:26:07
【问题描述】:

我正在尝试创建一个自定义 MembershipProvider,所以我创建了一个名为 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 的所有属性和功能吗?我错过了一些简单的东西吗?

我对此进行了一些研究,我假设 by virtue of this answer 问题是 Visual Studio 会自动使用 throw new NotImplementedException(); 填充 CustomMembershipProvider 中缺少的每个属性。然而,那个特定的答案并没有帮助我解决问题。

【问题讨论】:

    标签: c# asp.net asp.net-mvc asp.net-mvc-4 asp.net-membership


    【解决方案1】:

    我很确定这些是编译时错误,而不是您看到的运行时错误。

    MembershipProvider 是一个抽象类,为了创建抽象类的具体实现,您必须(至少)为其所有抽象成员提供实现。你的类只有三个显式成员(没有一个实现 MembershipProvider 的抽象成员),而据我统计,MembershipProvider 有 27 个抽象成员,所以你至少少了 27 个成员。

    MSDN 有一个article 介绍如何实现自定义成员资格提供程序,其中包含以下文字:

    下表列出了您必须从 ProviderBase 和 MembershipProvider 抽象类实现的必需属性和方法,以及每一个的描述。要查看每个成员的实现,请参阅为 Sample Membership Provider Implementation 提供的代码。

    后面是一个很长的属性和方法表。

    除了上面的文章,我还建议阅读abstract classes,因为您似乎不太清楚继承抽象类的含义。

    这里有一些有用的文章,其中包含有关使用内置功能在 ASP.NET 中设置身份的信息(TYPE CAST EXCEPTION 博客有几篇关于 ASP.NET 身份的不同帖子)。

    Deploy a Secure ASP.NET MVC 5 app with Membership, OAuth, and SQL Database to an Azure Website

    Customizing profile information in ASP.NET Identity in VS 2013 templates

    TYPE CAST EXCEPTION - ASP.NET MVC and Identity 2.0: Understanding the Basics

    【讨论】:

    • 非常感谢。我想解决方案是在CustomMembershipProvider 中实现MembershipProvider 的所有成员(我被本教程甩了:kitsula.com/Article/Custom-Membership-Provider-for-MVC,但如果我只想拥有MembershipProvider 抓取,这似乎不值得我自己的数据库中的用户。我将不得不考虑另一种方法来进行身份验证。
    • 除非你有一个已经存在的数据库或一个非常令人信服的理由,否则我认为尝试为会员创建自己的数据库访问层会适得其反。我已经发布了一些附加链接,指向有关 ASP.NET 身份的有用信息。
    猜你喜欢
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    • 2017-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多