是否可以向自定义ASP.NET Membership提供程序传递额外的自定义用户数据?

3
我正在实现我的自定义成员身份提供程序,我需要实现一些额外的字段(如名字,姓氏,国家等)。
我知道可以扩展MembershipUser类,并在从提供程序返回用户对象时进行转换。 但我找不到如何执行以下操作以及是否可能在用户注册期间创建新用户Membership.CreateUser(...) 时将这些自定义属性传递给我的提供程序。
这真的可能吗? 如果是,请问该如何实现?
谢谢
更新 MSDN文章说:

然而,此重载不会由Membership类或依赖于Membership类的控件(例如CreateUserWizard控件)调用。 要从应用程序调用此方法,请将由Membership类引用的MembershipProvider实例转换为您的自定义成员身份提供程序类型,然后直接调用CreateUseroverload。

在这种情况下,Membership是对类的实例的引用,同时它本身也是一个类。
((CustomMembershipProvider)Membership).CreateUser(...);

nor

(CustomMembershipProvider)Membership.CreateUser(...);

工作。

在这种情况下,我应该如何转换它?

更新:请查看我的答案。


2
是的,您可以创建自定义成员资格提供程序,这里有一个MSDN链接:http://msdn.microsoft.com/en-us/library/ms366730.aspx - MethodMan
这可能应该是一个答案,而不是一个评论。无论如何+1。 - doogle
是的,我看过这篇文章,但它并没有真正展示如何传递额外的字段给提供程序。所以基本上当我执行 Membership.CreateUser() 时,它只有标准方法签名,如果我重写我的提供程序的 CreateUser() 方法,我的方法将不会显示在列表中。 - Burjua
使用扩展方法怎么样? - keni
@keni 我怎么在这里使用扩展方法?我既没有直接调用基类也没有直接调用我的扩展类,而是通过 Membership 包装器调用它。我想我只需要正确地进行类型转换,但我现在有些迷茫。 - Burjua
如果您在调试器中查看返回类型,难道您不能看到正确的转换类型吗? - Wouter de Kort
2个回答

3
我已经学会了正确的类型转换方法,以下是方法:
自定义会员提供程序:
public sealed class CustomMembershipProvider : MembershipProvider {...}

自定义会员用户:

public class CustomMembershipUser : MembershipUser {...}

创建新的自定义用户:
CustomMembershipProvider myProvider = (CustomMembershipProvider)Membership.Provider;
CustomMembershipUser user = (CustomMembershipUser)myProvider.CreateUser(...);

获取自定义用户:
CustomMembershipProvider myProvider = CustomMembershipProvider)Membership.Provider;
CustomMembershipUser user = (CustomMembershipUser)myProvider.GetUser(...);

本文介绍如何实现自定义用户:http://msdn.microsoft.com/en-us/library/ms366730.aspx


2

您可以通过添加额外的配置文件信息来为用户添加附加的个人资料,而不是扩展MembershipUser

例如,可以将以下内容添加到您的配置文件中:

<profile>
    <properties>
        <add name="FirstName"/>
        <add name="LastName"/>
        <add name="Address"/>
        <add name="City"/>
        <add name="State"/>
        <add name="Zip"/>
    <properties>
<profile>

这将使ASP.NET创建一个ProfileCommon类,其中包括您在配置文件中指定的所有属性。
这是Profile属性的文档

配置文件数据与成员提供程序无关,我更希望将所有用户数据保存在一个地方。此外,我认为我离解决方案很近了,我需要弄清楚如何正确地进行类型转换。 - Burjua

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接