2011-09-11 71 views
0

這個問題是,我認爲,類似to my previous one。 採用最新的C#的Facebook SDK基於.NET 4,我得到與在最後一行下面的代碼信息「需要客戶端ID」的異常:Facebook C#SDK OAuth異常「需要ClientID」

var app = new DefaultFacebookApplication(); 
    app.AppId = "appId"; 
    app.AppSecret = "secret"; 
    var fb = new FacebookWebContext(app); 
    fb.IsAuthenticated(); 

應用程序ID和祕密設置正確。異常的堆棧跟蹤如下: System.Exception的發生

Message=ClientID required. Source=Facebook StackTrace: 
     at Facebook.FacebookOAuthClient.BuildExchangeCodeForAccessTokenParameters(IDictionary`2 parameters, String& name, String& path) 
     at Facebook.FacebookOAuthClient.ExchangeCodeForAccessToken(String code, IDictionary`2 parameters) 
     at Facebook.FacebookSession.get_AccessToken() 
     at Facebook.FacebookSession.get_Expires() 
     at Facebook.Web.FacebookWebContext.IsAuthenticated() 
     at Piedone.FacebookTest.Authorize() InnerException: 

在我使用的是JS SDK,初始化爲以下客戶端:

  FB.init({ 
       appId: appId, 
       status: true, // check login status 
       cookie: true, // enable cookies to allow the server to access the session 
       xfbml: true, // parse XFBML 
       oauth: true // enable OAuth 2.0 
      }); 

的用戶才能正確登錄與JS login()方法,如在下面的代碼段的警報運行:

 FB.login(function (response) { 
      if (response.authResponse) { 
       alert("logged in"); 
      } else { 
       alert('User cancelled login or did not fully authorize.'); 
      } 
     }, { scope: scope }); 

在Facebook上的應用程序設置兩個「部隊使用登錄OAuth調用和auth.login的祕密「和」加密訪問令牌「已打開。據我所知,所有這些都可以使用OAuth 2身份驗證。 有人有一個想法我做錯了什麼?在這幾行代碼中確實不會有任何錯誤...

在此先感謝您的幫助!

編輯: FacebookWebContext的的accessToken屬性會引發同樣的錯誤和HttpContext.CurrentNotification做:

CurrentNotification '(_facebookWebContextCache.HttpContext).CurrentNotification' threw an exception of type 'System.PlatformNotSupportedException' System.Web.RequestNotification {System.PlatformNotSupportedException} 
This operation requires IIS integrated pipeline mode. 

因爲我必須從Visual Studio,其開發服務器上運行的程序(如我目前開發應用程序)對於後一個例外,我想沒有辦法做任何事情。其實我也嘗試過使用Webmatrix的IIS express,但問題依然存在。 這也是有趣的是,在該FacebookWebContext設置(應用程序ID,密碼)的設置是否正確,以及,用戶ID和簽名的請求,也沒有...

編輯2: 我也得到了使用SDK來源時出現同樣的錯誤。它看起來AccessToken和會話中的Expires屬性會拋出異常。我不知道這是否與上面的httpcontext問題有關。

回答

0

最後我設法解決了這個問題,但很可能這是SDK中的一個錯誤。

原因 的問題是,FacebookApplication.Current是空的,因爲它不會與數據在FacebookWebContext構造函數設置填充。這導致訪問令牌的問題:在第119行的FacebookSession.AccessToken中,FacebookOAuthClient使用FacebookApplication.Current實例化,當然實際上是空的。所以FacebookOAuthClient拋出異常,因爲它沒有得到應用程序設置。

解決方案 的解決方法是簡單明確地FacebookWebContext的實例化設置當前FacebookApplication在一起:

var app = new DefaultFacebookApplication(); 
app.AppId = "appId"; 
app.AppSecret = "secret"; 
var fb = new FacebookWebContext(app); 
FacebookApplication.SetApplication(app); // Note this is the new line 
+0

還開一個問題:http://facebooksdk.codeplex.com/workitem/5902 – Piedone

+0

Prabir什雷斯塔已經olled了速戰速決了最新的檢查中:HTTP:/ /facebooksdk.codeplex.com/SourceControl/changeset/changes/7ce3c54e1aea – Piedone

2

還有一個解決辦法是增加Facebook的設置,您將網頁或應用congfig

<facebookSettings appId="appid" appSecret="secret" /> 

之後創建Auth類

var oauth = new FacebookOAuthClient(FacebookApplication.Current); 

它西港島線工作,以及

+0

謝謝,但我需要從代碼中設置應用程序數據。順便說一句,這個問題現在已經過時,因爲問題已經在SDK中解決了。 – Piedone

+0

如果您只使用一個Facebook應用程序,此解決方案很好。 –