我正在尝试创建自定义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会自动填充CustomMembershipProvider
中缺少throw new NotImplementedException();
{{1}}的每个属性。然而,这个特定的答案并没有帮助我解决这个问题。
答案 0 :(得分:1)
我非常确定这些是编译时错误,而不是您看到的运行时错误。
MembershipProvider
是一个抽象类,为了创建抽象类的具体实现,您必须为(至少)所有抽象成员提供实现。你的班级只有三个明确的成员(没有一个是实现MembershipProvider
的抽象成员),而根据我的统计,MembershipProvider
有27个抽象成员,所以你至少有27个成员短。
MSDN有关于如何实现自定义成员资格提供程序的article,它包含以下文本:
下表列出了必须从ProviderBase和MembershipProvider抽象类实现的必需属性和方法,以及每个属性和方法的说明。要查看每个成员的实现,请参阅为示例成员资格提供程序实现提供的代码。
后面是一个非常长的属性和方法表。
除了上面的文章之外,我还建议您阅读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