2012-08-02 70 views
1

嗨,我基本上是试图创建自己的Facebook登录(并创建一个本地帐户)。我有一切工作,除了这一点:创建帐户后,我试图设置一个基本的配置文件,并将其绑回帐户。我能够创建该帐户,但是当我尝试将提供程序键强制转换为Guid时,它将返回为空。如果我尝试不投它,我得到错误“不能隐式对象转换为guid”的providerkeyvalue本身不为空,并且在这样的格式{7092216C-943F-4D30-9432-6CD10CF3447E}无法将ProviderUserKey转换为GUID?

// Attempt to register the user 
MembershipCreateStatus createStatus; 
Membership.CreateUser(fbprofile.first_name + fbprofile.id, GenerateRandomPassword(8), fbprofile.email, null, null, true, null, out createStatus); 

if (createStatus == MembershipCreateStatus.Success) 
{ 
    MembershipUser user = Membership.GetUser(fbprofile.first_name + fbprofile.id); //Gotta get the GUID and tie it to the profile 


    profile.UserID = (Guid)user.ProviderUserKey; 
}else{ 
} 

编辑:如果它有所作为,ProviderUserKey设置为仅在会员类中的对象。

+0

你在使用SqlMembershipProvider吗?在这种情况下,你的代码应该可以工作(根据http://msdn.microsoft.com/en-us/library/system.web.security.membershipuser.provideruserkey.aspx)。如果没有,当将其添加到(快速)观察窗口时,user.ProviderUserKey.GetType()会返回什么? – M4N 2012-08-02 21:19:03

+1

你的问题没有任何意义。如果将user.ProviderUserKey转换为guid(通过强制转换),则它不会返回null,如果该值为null或不是guid,则会引发异常。 Guid是一个值类型,不能为空,所以如果你找到了profile.UserID为null,它必须是因为它是可以为空的类型,并且你将它设置为null。 – 2012-08-02 21:22:03

回答

0

根据您的意见,您的问题是您没有创建Profile类的实例。如果不先创建该对象的实例,则无法将值分配给空对象。

“对象引用未设置为对象的实例”表示您试图取消引用空对象,即您试图访问空对象的成员或属性。

在该行代码中,只有两件事会导致该错误。两个配置文件都为空或用户为空,如果它们中的任何一个为空,您将得到此错误。这是它唯一可能的事情。

+0

您是否指的是标准Microsoft Profile类?我基本上为我的一个简单的实体。 – dreadlocks1221 2012-08-02 21:29:54

+0

@ dreadlocks1221 - 不,我在谈论你的代码中称为profile的变量。 – 2012-08-02 21:31:59

+0

好的你是对的,配置文件是空的,所以我不能给它分配GUID,虽然奇怪的是它让我在崩溃之前分配其他字段。 – dreadlocks1221 2012-08-02 21:51:01

0

您可以将字符串传递给的GUID结构的constructor

// user.ProviderUserKey == "{7092216C-943F-4D30-9432-6CD10CF3447E}" 
profile.UserID = new Guid(user.ProviderUserKey); 

构造函数接受各种格式的GUID,如 “dddddddddddddddddddddddddddddddd”, “dddddddddddd-DDDDDDDD-dddddddddddd” “{ddddddddd-dddd-dddd-dddd-dddddddddddd}”等等。

+0

谢谢,但我仍然有同样的问题,我也必须调用ToString为dknaack建议 – dreadlocks1221 2012-08-02 21:13:59