2011-10-31 42 views
0

我有下面的代碼來檢查,如果我的標籤是用戶喜歡的:Facebook標籤,發現如果喜歡

 protected bool IsPageLiked() 
    { 
     try 
     { 
      var current = ConfigurationManager.GetSection("facebookSettings") 
          as IFacebookApplication; 
      dynamic data = FacebookWebContext.Current.SignedRequest.Data; 

      if (data.page != null) 
      { 
       var pageId = (String)data.page.id; 
       var isUserAdmin = (Boolean)data.page.admin; 
       var userLikesPage = (Boolean)data.page.liked; 
       if (userLikesPage) 
        return true; 
      } 
     } 
     catch (Exception ex) 
     { 
      return false; 
     } 
     return false; 
    } 

這正常工作,當我最初載入我的標籤。 但是,如果我嘗試和標籤內改變頁面後調用相同的代碼,我得到以下錯誤:

{「前提條件失敗:String.IsNullOrEmpty(signedRequestValue)」}

有一種方法,我可以使這個代碼在第一頁後工作?

我知道我可以檢查標籤的第一頁上的喜歡,並把它放到會話對象或東西,但我不希望這樣做。

我的應用程序本身就是MVC 3

感謝

編輯

我認爲正在發生的事情是,當我改變頁面(我使用RedirectToAction方法),它失去了signed_request查詢字符串,因此我得到的錯誤。

編輯2

不知道上面是正在發生的事情畢竟是我不能看到初始頁面上的任何查詢字符串值?它仍然無法獲得簽名的請求。

它看起來像signed_request是一種形式的對象(的Request.Form [「signed_request」]返回在inital頁的字符串,但不是第二頁)。

回答

1

網頁標籤基本上只是你的應用程序頁面上的iframe中,就像你已經注意到了簽名的請求被張貼在網頁加載的標籤。

當你在外Facebook的框架不重裝所以signed_request沒有被重新發布到你的標籤是標籤內更改頁面,爲什麼你不能再訪問它。

您需要將signed_request從一個頁面傳遞給下一個頁面,或者確保所有鏈接都使用target =「_ top」,以便每次重新加載整個頁面,並且仍然可以獲得POST。

要定義你的標籤,加載,你可以使用一個叫做app_data文件的URL到您的標籤的附加參數的頁面,如

http://www.facebook.com/MY_PAGE?sk=app_MY_APP_ID&app_data=A_STRING_OF_DATA

你的標籤,然後將收到此作爲signed_request的一部分,您可以抓住它並使用它來確定您的選項卡需要顯示的頁面。

+0

我在視圖之間傳遞了signed_request。 – mp3duck