繁体   English   中英

如何获取Facebook个人资料图片C#.Net

[英]How to get Facebook profile Picture C# .Net

我需要获取用户的Facebook个人资料图片并将其输入到作物结构中。 我正在使用Asp.NET MVC,jcrop和facebook SDK。 到目前为止,我可以从我的计算机输入文件。 我还有一个访问用户的facebook并返回与用户ID的会话的函数,以及一个应返回个人资料图片的GetPhoto函数。 有人能帮我吗?

我使用以下代码从计算机输入文件:

[ValidateAntiForgeryToken]
public ActionResult _Upload(IEnumerable<HttpPostedFileBase> files)
{
    if (files == null || !files.Any()) return Json(new { success = false, errorMessage = "No file uploaded." });
    var file = files.FirstOrDefault();  // get ONE only
    if (file == null || !IsImage(file)) return Json(new { success = false, errorMessage = "File is of wrong format." });
    if (file.ContentLength <= 0) return Json(new { success = false, errorMessage = "File cannot be zero length." });
    var webPath = GetTempSavedFilePath(file);
    //mistertommat - 18 Nov '15 - replacing '\' to '//' results in incorrect image url on firefox and IE,
    //                            therefore replacing '\\' to '/' so that a proper web url is returned.            
    return Json(new { success = true, fileName = webPath.Replace("\\", "/") }); // success
}

我尝试这样做,但GetPhoto()返回一个null元素。

 public ActionResult RetornoFb()
        {
            var _fb = new FacebookClient();
            FacebookOAuthResult oauthResult;

            if (!_fb.TryParseOAuthCallbackUrl(Request.Url, out oauthResult))
            {
            // Error
        }

        if (oauthResult.IsSuccess)
        {
            dynamic parameters = new ExpandoObject();
            parameters.client_id = id;
            parameters.redirect_uri = "http://localhost:4323/Avatar/RetornoFb/";
            parameters.client_secret = secretkey;
            parameters.code = oauthResult.Code;

            dynamic result = _fb.Get("/oauth/access_token", parameters);

            var accessToken = result.access_token;
            Session.Add("FbUserToken", accessToken);
        }
        else
        {
        }

        //return RedirectToAction("Upload");
        HttpPostedFileBase objFile = (HttpPostedFileBase)new MemoryPostedFile(GetPhoto());
        var webPath = GetTempSavedFilePath(objFile);

        return Json(new { success = true, fileName = webPath.Replace("\\", "/") }); // success
    }

public byte[] GetPhoto()
        {
            try
            {
                string url = "https://graph.facebook.com/" + GetProfileId() + "?fields=picture.width(480).height(480)";

                WebClient webClient = new WebClient();
                string response = webClient.DownloadString(url);

                dynamic json = JObject.Parse(response);

                string urlPicture = json.picture.data.url;

                return webClient.DownloadData(urlPicture);
            }
            catch (Exception)
            {
                return null;
            }
        }

解决了更改我的GetPhoto函数的问题。 我遇到了权限问题。

private byte[] GetPhoto()
            {
                try
                {
                    var _fb = new FacebookClient(Session["FbuserToken"].ToString());
                    dynamic resultMe = _fb.Get(GetProfileId()+"?fields=picture.width(480).height(480)");

                WebClient webClient = new WebClient();
                string urlPicture = resultMe.picture.data.url;

                return webClient.DownloadData(urlPicture);

            }

            catch (Exception)
            {

                return null;
            }

        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM