Facebook C SDK和Web API-(OAuthException-120)(120)相册id无效

Facebook C SDK和Web API-(OAuthException-120)(120)相册id无效,facebook,facebook-graph-api,asp.net-web-api,Facebook,Facebook Graph Api,Asp.net Web Api,我有一个客户端应用程序,可以对Facebook进行身份验证,然后向使用Facebook C SDK的Web API方法提供访问令牌,例如发布到用户的相册: var facebook = new FacebookClient(photoDTO.FacebookSessionToken); dynamic result = facebook.Post("me/photos", new {

我有一个客户端应用程序,可以对Facebook进行身份验证,然后向使用Facebook C SDK的Web API方法提供访问令牌,例如发布到用户的相册:

var facebook = new FacebookClient(photoDTO.FacebookSessionToken);

dynamic result = facebook.Post("me/photos",
                    new
                    {
                        message = photoDTO.Photo.Comments,
                        file = new FacebookMediaObject
                        {
                            ContentType = "image/jpeg",
                            FileName = fileName,
                        }.SetValue(imageBytes)
                    });
这段代码过去是有效的,但是现在我遇到了一个异常:OAuthException-120无效的相册id。我相信这个错误与身份验证令牌有关,但是我已经通过浏览到。。。并且它会正确返回当前登录到应用程序的用户的配置文件。我使用的是SDK版本6.0.10.0


如何使用从客户端应用程序传递的身份验证令牌发布到当前登录的用户的配置文件

不确定这是一个答案还是一个解决方法,但由于我知道我要发布到的相册的名称,我查询了用户的相册以获取相册id,然后使用该id直接发布到相册:

var facebook = new FacebookClient(photoDTO.FacebookSessionToken);

string albumId = null;
string albumName = "Album";
dynamic albums = facebook.Get("me/albums");

// Get the album id of the album we want to post to
foreach(dynamic albumInfo in albums.data)
{
    if (albumInfo.name == albumName)
    {
        albumId = albumInfo.id;
        break;
    }
}

// If album does not exist, create it
if (albumId == null)
{
    dynamic album = facebook.Post("me/albums",
                        new
                        {
                            name = albumName
                        });

    albumId = album.id;
}

// Post the photo to the album                
dynamic photo = facebook.Post("/" + albumId + "/photos",
                    new
                    {
                        message = photoDTO.Photo.Comments,
                        file = new FacebookMediaObject
                        {
                            ContentType = "image/jpeg",
                            FileName = fileName,
                        }.SetValue(imageBytes)
                    });

请注意,相册ID与相册名称不同,这是您将相册ID与相册名称进行比较的问题!检查相册api

正确的算法是:

查找相册ID(如果有),然后将媒体发布到指定的ID,否则处理错误


不过,您需要/me相册的等效id。这可能是Facebook改变的重点,你需要增加权限才能通过用户的相册发泄愤怒?但是/me是一个众所周知的相册名称,每个人都有它的独特属性。这已经被删除。它被别的东西取代了吗?它刚刚从api中退出了吗?这仅仅是一个权限问题吗?@JamesWestgate如果专辑ID在结果响应中返回,那么您将得到您正在询问的许多问题的答案,如果它没有返回,并且您确定它存在,那么这是另一个问题,您将必须澄清进一步的内容,以便我可以帮助您。感谢您迄今为止的帮助。虽然我没有问这个问题,但我还是提供了赏金。就提供的赏金而言,如果有办法找到/me/photos的/me部分引用的相册id,并详细说明这比不需要任何权限的旧方法需要什么权限,就可以获得赏金。@JamesWestgate我不帮助别人获得赏金,我帮助别人,因为这让我感到高兴:,希望我能帮助你。
FB.api(
    "/{album-id}",
    function (response) {
      if (response && !response.error) {
        //album was found , your code goes right here.
      }
     else {
        //album was not found handle your error.
      }

    }
);