Приложение Facebook C # SDK MVC3 не публикуется на стене - PullRequest
1 голос
/ 18 апреля 2011

Я использую последний SDK Facebook C # SDK, то есть 5.0.9 Beta У меня было одно текстовое поле на странице в кнопке, которое предполагало разместить текст в пользовательской стене. Но проблема в том, что когда я нажимаю кнопку, страница перенаправляется на что-то вроде http://localhost:5000/facebookredirect.axd?code=JU1q_vSj13WRn1wIjHjCZRF5iDy_xvkFUppxADeS0F0.eyJpdiI6InJwejVVWXpJY1RqV0VaY1JjTl92ZGcifQ.KSa0B1ax1qCZZ-K_oXLmAZR8lyknWDRY9ieWxuLIZqXedUzb1WQH_FrcMF98VO6U1Dk5KIo4dz4AMdBxtfrUUH0ucgOoPC6_7Zb03WsIgY2fF84L-0s3A7m3f971sJUS4nQyRGDZ_-8oPuO0K0dTPg&state=eyJyIjoiaHR0cDovL2FwcHMuZmFjZWJvb2suY29tL3Rlc3RhcHBfdGVzdGluZy9Ib21lL0Fib3V0P0xlbmd0aD0zIn0

и затем снова перенаправляется на URL моего приложения между ними. Я не получаю никаких данных в моем контроллере, значения отображаются как нулевые.

После анализа HTTP-звонка я обнаружил, что содержимое

<html><head><script type="text/javascript">

top.location = "http://www.facebook.com/dialog/oauth/?scope=user_about_me,friends_about_me,publish_stream&state=eyJyIjoiaHR0cDovL2FwcHMuZmFjZWJvb2suY29tL3Rlc3RhcHBfdGVzdGluZy9ob21lL0Fib3V0In0&client_id=218380811509677&redirect_uri=http://localhost:5000/facebookredirect.axd";

</script></head><body></body></html>

Я использую Ajax, но поведение также и для обычного.

Это похоже на Авторизацию на каждый звонок. Нужно ли реализовывать Oauth 2.0.

Я использую пример приложения для MVC3. Может кто-нибудь сказать мне, что происходит не так?

Ответы [ 2 ]

1 голос
/ 18 апреля 2011

Это типичное событие, когда вы используете FacebookAuthorizeAttribute из Facebook.Web.Mvc.По крайней мере, ваш код ответа позволил мне предположить, что oauth-handshake не работал должным образом (хотя вы получили «код», вы забыли получить с ним «access_token»)

В случае, если выИспользуя FacebookAuthorizeAttribute, проверьте, есть ли у вас настройки приложения в facebook-developer-app И в ваш web.config вставлена ​​правильная страница canvas-url / canvas-page.(В вашем случае, для тестирования, "http://localhost/" /" http://apps.facebook.com/yourappname")

Недавно я прочитал пост, в котором говорилось, что вы не должны использовать классы Facebook.Mvc, потому что они предоставляют пример-код см. 1. Ответ по этой ссылке

0 голосов
/ 17 марта 2015

Попробуйте этот код

public ActionResult Index()
        {
            var url = "http://www.facebook.com/v2.2/dialog/oauth/?scope=user_friends,read_friendlists,publish_actions,read_stream,read_insights,manage_pages,user_checkins,user_photos,read_mailbox,manage_notifications,read_page_mailboxes,email,user_videos,user_groups,offline_access,publish_actions,manage_pages&client_id=" + ConfigurationManager.AppSettings["ClientId"] + "&redirect_uri=" + ConfigurationManager.AppSettings["RedirectUrl"] + "&response_type=code";

            return Redirect(url);
        }

URL обратного вызова

    public string AddFacebookAccount(string code)
    {
        string ret = string.Empty;
        string client_id = ConfigurationManager.AppSettings["ClientId"];
        string redirect_uri = ConfigurationManager.AppSettings["RedirectUrl"];
        string client_secret = ConfigurationManager.AppSettings["ClientSecretKey"];
        long friendscount = 0;
        try
        {
            FacebookClient fb = new FacebookClient();
            string profileId = string.Empty;
            Dictionary<string, object> parameters = new Dictionary<string, object>();
            parameters.Add("client_id", client_id);
            parameters.Add("redirect_uri", redirect_uri);
            parameters.Add("client_secret", client_secret);
            parameters.Add("code", code);
            JsonObject fbaccess_token = null;
            try
            {
                System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls;
                fbaccess_token = (JsonObject)fb.Get("/oauth/access_token", parameters);

            }
            catch (Exception ex)
            {

                try
                {
                    fbaccess_token = (JsonObject)fb.Get("/oauth/access_token", parameters);
                }
                catch (Exception ex1)
                {
                    return "issue_access_token";
                }
            }

            string accessToken = fbaccess_token["access_token"].ToString();
            Session["AccessToken"] = accessToken;
            if (accessToken != null)
            {
                fb.AccessToken = accessToken;
                System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls;
                dynamic profile = fb.Get("v2.2/me");
                dynamic friends = fb.Get("v2.2/me/friends");
                try
                {
                    Session["uid"] = profile.id;
                    friendscount = Convert.ToInt16(friends["summary"]["total_count"].ToString());
                }
                catch (Exception ex)
                {
                    Console.Write(ex.Message);
                }

            }
            //return new JavaScriptSerializer().Serialize(ret);
            return ret;
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.StackTrace);
            return "Something Went Wrong";
        }
    }

Текст сообщения и код изображения

        public ActionResult ComposeMessageSend(string message)
        {
            System.Net.ServicePointManager.Expect100Continue = false;
            string file = Server.MapPath("~/Images/11.jpg");
            message = "This is Photoshop's version of Lorem Ipsum. Proin gravida nibh vel velit auctor aliquet. Aenean sollicitudin, lorem quis bibendum auctor, nisi elit consequat ipsum, nec sagittis sem nibh id elit. Duis sed odio sit amet nibh vulputate cursus a sit amet mauris. Morbi accumsan ipsum velit. Nam nec tellus a odio tincidunt auctor a ornare odio. Sed non mauris vitae erat consequat auctor eu in elit. Class aptent" ;
            string tokenid = string.Empty;
            string userid = string.Empty;


                    //Arvind Itact                    
                    tokenid = "CAAK1OqZAcaoMBAHxFQXf78orU2KkZCijtr5MT14VBQsB9QB4YkL6Ua3FUHcSEpss7f0dwIPofpDI0oOSH94iaOQx9tbsS7zbZAu3To6R5dKo4jQ2HGXoiiiVBIEfEoVKwieOLzT6IvZAwlqMxK8x8gqR0RG9Dgd60NwCM3XRPDHZAeoUVYpSELoQdPJS1uDbNQFBK4mgtaSVPcbkjmD1VYhpC";
                    userid = "1383854058392012107";                    
                    string result = FacebookComposeMessage(tokenid, userid, message, file);                     


           return View();
        }

        public string FacebookComposeMessage(string tokenid,string userid ,String message,string imagepath)
        {

            FacebookClient fb = new FacebookClient();
            string ret = "";
            fb.AccessToken = tokenid;
            System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls;
            var args = new Dictionary<string, object>();
            args["message"] = message;
            if (!string.IsNullOrEmpty(imagepath))
            {
                var media = new FacebookMediaObject
                {
                    FileName = "filename",
                    ContentType = "image/jpeg"
                };
                byte[] img = System.IO.File.ReadAllBytes(imagepath);
                media.SetValue(img);
                args["source"] = media;
                ret = fb.Post("v2.0/" + userid + "/photos", args).ToString();

            }
            else
            {
                ret = fb.Post("v2.0/" + userid + "/feed", args).ToString();
                //   ret = fb.Post("/" + objFacebookAccount.FbUserId + "/photos", args).ToString();
               // var data = fb.Get("v2.2" + ret);
            }
            return ret;
        }
...