【问题标题】:Facebook SDK .NET - (#200) The user hasn't authorized the application to perform this actionFacebook SDK .NET - (#200) 用户尚未授权应用程序执行此操作
【发布时间】:2013-09-02 12:35:27
【问题描述】:

我正在尝试从 C# Web 应用程序向 Facebook 页面发布消息。我在调用 FacebookClient.Post(...) 时遇到以下异常:

FacebookOAuthException (OAuthException - #200) (#200) 用户没有 授权应用程序执行此操作

代码:

var facebookClient = new FacebookClient();
facebookClient.AppId = appId;
facebookClient.AppSecret = appSecret;

if (Request["code"] == null)
{
    var authUrl = facebookClient.GetLoginUrl(new
    {
        client_id = appId,
        client_secret = appSecret,
        scope = "publish_stream",
        redirect_uri = Request.Url.AbsoluteUri
    });

    Response.Redirect(authUrl.AbsoluteUri);
}
else
{
    dynamic result = facebookClient.Get("oauth/access_token", new
    {
        client_id = appId,
        client_secret = appSecret,
        grant_type = "client_credentials",
        redirect_uri = Request.Url.AbsoluteUri,
        code = Request["code"]
    });

    facebookClient.AccessToken = result.access_token;
    // Store access token
}

发送消息:

protected void PublishMessage(string message)
{
    FacebookClient client = new FacebookClient(AccessToken);

    client.AppId = ApplicationId;
    client.AppSecret = ApplicationSecret;

    dynamic parameters = new ExpandoObject();
    parameters.message = message;

    client.Post(PageName + "/feed", parameters);
}

我接受以下 Facebook 提示以确保该应用具有访问权限:

在我的 Facebook 个人资料设置中,该应用如下所示:

我正在使用 Facebook SDK for .NET v6.4.2(最新)。

【问题讨论】:

    标签: c# asp.net .net facebook facebook-graph-api


    【解决方案1】:

    这似乎是一个愚蠢的问题,但您不会错过访问令牌请求中的请求代码吗?不应该是这样吗?

    dynamic result = facebookClient.Get("oauth/access_token", new
    {
        client_id = appId,
        client_secret = appSecret,
        grant_type = "authorization_code"
        redirect_uri = Request.Url.AbsoluteUri,
        code = Request["code"]
    });
    

    编辑刚刚意识到,使用请求代码时必须使用不同的grant_type :)

    【讨论】:

    • 不敢相信我错过了!我必须已经通过此代码 100 次了。但不幸的是,它仍然无法正常工作。我得到完全相同的错误。还有什么想法吗?
    • 嗯,我见过几个例子,在你取回访问令牌后,你实例化一个新的 Facebook 对象,并将令牌作为参数传递给构造函数,然后所有进一步的调用都是用这个新实例。虽然我不确定为什么这会有所作为:(
    • 我基本上就是这样做的(用代码编辑的问题)。确实是悲伤的脸:(
    • 刚刚添加了一个编辑。抱歉,我在第一次浏览时没有注意到您的 grant_type。我很确定现在应该可以工作了:)
    • Here 是一个很好的总结。这些不是 Facebook 特定的,但 oauth 文档仍然如此。解释得很好
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-08
    相关资源
    最近更新 更多