2012-08-02 44 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