2012-06-13 75 views
0

我正在開發Facebook應用程序(使用ASP.NET C#和Nathan Totten的Facebook C#SDK)並嘗試訪問擴展權限。 我嘗試在本地主機(與Facebook中的現有應用程序),並且每個人都工作。但是當我嘗試直接在Facebook上使用它時,我獲得了一個空白頁面(我仍然在facebook上連接)。C#中的Facebook擴展權限#

這是我的代碼:

頁/ ASPX:

protected void btn_ask_question_Click(object sender, EventArgs e) 
    { 
     if (ControllerAccess.testUserConnected()) 
     { 
      if (txt_ask_question.InnerText != "") 
      { 
       Dictionary<string, object> action = new Dictionary<string,object>(); 
       action.Add("action", "askQuestion"); 
       action.Add("message", txt_ask_question.InnerText); 
       action.Add("idTheme", ddl_choose_question_category.SelectedValue); 
       HttpContext.Current.Session["ActionToDo"] = action; 
       String s = Controller.GetExtendedPermission2(this, ControllerAccess.getScopeByAction("askQuestion")); 
       try{ 
        Response.Redirect(s, false); 
       } catch(Exception ex) 
       { 
       } 
      } 
     } 
    } 

以我的Page_Load():

if (HttpContext.Current.Session["ActionToDo"] != null) 
      { 
       Dictionary<string, object> action = HttpContext.Current.Session["ActionToDo"] as Dictionary<string, object>; 
       String s = action["action"].ToString(); 
       switch (s) 
       { 
        case "askQuestion": 
         Guid idTheme; 
         Boolean themeExists = Guid.TryParse(action["idTheme"].ToString(), out idTheme); 
         if(themeExists) 
         { 
          askQuestion(action["message"].ToString(), idTheme); 
          lbl_errors.Text = "Votre question a bien été posée"; 
         } 
         break; 
        default: 
         break; 
       } 
       HttpContext.Current.Session["ActionToDo"] = null; 
      } 

在Control.cs:

public static string GetCustomOAuthDialogParameters(string AppID, string RedirectURI, string Scope, string State) 
    { 
     string CustomParameters = "?client_id=" + AppID + "&redirect_uri=" + RedirectURI + "&scope=" + Scope + "&state=" + State; 
     return CustomParameters; 
    } 

    public static void GetExtendedPermission(Page page, String scope) 
    { 

     ecritureFichier("GetExtendedPermission"); 
     Label lbl_errors = page.Form.FindControl("lbl_errors") as Label; 
     string OAuthDialogAbsoluteURL = ""; 
     try 
     { 
      string OAuthDialogURL = "https://www.facebook.com/dialog/oauth"; 
      string PageLocation = GetCurrentPageFacebookPublishedPath(page.Request); //The redirect page (eg: https://apps.facebook.com/democsharpsdk/TestsExtendedPermission.aspx) 
      string UniqueReferenceCode = Guid.NewGuid().ToString(); 

      OAuthDialogAbsoluteURL = OAuthDialogURL + GetCustomOAuthDialogParameters(AppID, PageLocation, scope, UniqueReferenceCode); 
      page.Response.Redirect(OAuthDialogAbsoluteURL, false); 
     } 
     catch (Exception exp) 
     { 
      lbl_errors.Text += "Erreur Catchée via ASP.NET : " + exp.Message; 
     } 
    } 

的當我使用這個l時出現空白頁面ine:page.Response.Redirect(OAuthDialogAbsoluteURL,false);

但我登錄我的腳步,我的OAuthDialogAbsoluteURL是正確的:

https://www.facebook.com/dialog/oauth?client_id=XXXXXXXXXXXXXXXXX&redirect_uri=https://apps.facebook.com/name_of_my_app&scope=email&state=0443030f-dddd-4fe6-9d6c-9454409d01b3

當我手動輸入到地址欄中,一切正常。

您對本地版本和已發佈版本之間的區別以及重定向不起作用有什麼想法嗎?也許Facebook阻止一些請求?

謝謝。

回答

0

我終於解決了我的問題,使用Chrome調試器。錯誤是:

Refused to display document because display forbidden by X-Frame-Options 

我使用Javascript功能來解決這個問題,並做了我重定向這樣的:

Response.Write("<script>"); 
Response.Write("window.open('"+redirect+"','_top')"); 
Response.Write("</script>"); 

希望它會幫助一些人。

0

如果您想使用應用程序測試不同的環境,請確保您的設置指向託管版本。出於安全原因,Facebook不允許您從未連接到您的應用的網站授權用戶。

通常情況下,您會看到「URL不屬於應用程序」或類似錯誤。

+0

這就是爲什麼我顯示地址。我認爲這是正確的,Facebook的開發頁面確認這可能是最好的方法。所以我想知道如果我做錯了什麼:)。我有一個捕獲方法的日誌消息,但沒有記錄,所以它不會進入catch ..:/ – algelos