无效的OAuth 2.0访问令牌例外

时间:2010-12-07 22:24:07

标签: facebook facebook-c#-sdk

我尝试使用FQL(Facebook C#SDK,ASP .NET MVC,VB,iFrame Canvas应用程序)获取所有用户照片。 我的代码如下:

Dim app As New FacebookApp()
Dim result As New List(Of FB_Picture)
Dim photoList As Object = app.Fql("SELECT src_small,src_big,src,caption FROM photo WHERE aid IN ( SELECT aid FROM album WHERE owner=" + FacebookId.ToString() + " ) ORDER BY created DESC LIMIT " + FromN.ToString() + "," + ToN.ToString())

For i As Integer = 0 To photoList.Count
result.Add(New FB_Picture() With {.Caption = photoList(i).caption, .Src = photoList(i).src, .Src_big = photoList(i).src_big, .Src_small = photoList(i).src_small}) 
Next
Return result

FB_Picture是我存储用户图片的类。

我的应用具有user_photos权限。

但是我有一个错误 - 无效的OAuth 2.0访问令牌

FacebookOAuthException: Invalid OAuth 2.0 Access Token]
Facebook.FacebookApp.MakeRequest(HttpMethod httpMethod, Uri requestUrl, Byte[] postData, String contentType) +393
Facebook.<>c__DisplayClassf.<OAuthRequest>b__e() +20
Facebook.FacebookApp.WithMirrorRetry(Func`1 body) +225
Facebook.FacebookApp.OAuthRequest(Uri uri, IDictionary`2 parameters, HttpMethod httpMethod) +338
Facebook.FacebookApp.RestServer(IDictionary`2 parameters, HttpMethod httpMethod) +481
Facebook.FacebookAppBase.Api(String path, IDictionary`2 parameters, HttpMethod httpMethod) +236
Facebook.FacebookAppBase.Api(IDictionary`2 parameters) +132
Facebook.FacebookAppExtensions.Fql(FacebookAppBase app, String query) +310
你可以帮帮我吗?我能解决什么?我可以使用Facebook C#SDK使用FQL吗?

2 个答案:

答案 0 :(得分:2)

Facebook SDK的开发人员有一件事情并不清楚SDK的新用户或接触Facebook开发的新人。

Facebook SDK显然是一个包装器,但它是一个基于cookie的包装器。这意味着在一天结束时Facebook会为您的应用程序维护会话状态。他们没有维护它。因此,只要您的应用程序的用户单击您的应用程序中的链接并且您想要跟踪该用户(或更准确地说是该会话),您需要确保您的链接指向网址,例如:

http://apps.facebook.com/Your_Application_Name_Here

而不是:

http://www.Your_Application_Name_Here.com

如果你不这样做,那么Facebook无法跟踪会话,你已经有效地离开了他们的域名。如果您在使用Url.Action在我的视图中编写链接时出现错误,您会注意到这一点:

<a href="<%= Url.Action("CreateOrder", "Home") %>">Create an Order</a>

我一直遇到类似的错误。这就是为什么Totten和编写SDK的其他人给你的辅助方法如:

<%= Url.CanvasAction("CreateOrder", "Home") %>

HTH

答案 1 :(得分:1)

您需要有一个活动会话才能进行FQL查询。查看最新版本的Facebook C#SDK中的示例,以获取有关如何获取访问令牌的帮助。获得访问令牌后,只需将代码更改为以下内容:

Dim app As New FacebookApp("your_access_token_here")