how to post to facebook page wall from .NET

前端 未结 7 824
执念已碎
执念已碎 2020-12-09 23:30

I\'ve created Facebook page. I have no application secret and no access token.

I want to post to this page from my .NET desktop application. How can I do it? Can any

7条回答
  •  一向
    一向 (楼主)
    2020-12-09 23:44

    You can use https://www.nuget.org/packages/Microsoft.Owin.Security.Facebook/ to obtain users login and permission and https://www.nuget.org/packages/Facebook.Client/ to post to feeds.

    Below example is for ASP.NET MVC 5:

    public void ConfigureAuth(IAppBuilder app)
            {
                app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
    
                // Facebook 
                var facebookOptions = new FacebookAuthenticationOptions
                {
                    AppId = "{get_it_from_dev_console}",
                    AppSecret = "{get_it_from_dev_console}",
                    BackchannelHttpHandler = new FacebookBackChannelHandler(),
                    UserInformationEndpoint = "https://graph.facebook.com/v2.4/me?fields=id,name,email,first_name,last_name,location",
                    Provider = new FacebookAuthenticationProvider
                    {
                        OnAuthenticated = context =>
                        {
                            context.Identity.AddClaim(new Claim("FacebookAccessToken", context.AccessToken)); // user acces token needed for posting on the wall 
                            return Task.FromResult(true);
                        }
                    }
                };
                facebookOptions.Scope.Add("email");
                facebookOptions.Scope.Add("publish_actions"); // permission needed for posting on the wall 
                facebookOptions.Scope.Add("publish_pages"); // permission needed for posting on the page
                app.UseFacebookAuthentication(facebookOptions);
    
                AntiForgeryConfig.UniqueClaimTypeIdentifier = ClaimTypes.NameIdentifier;
            }
        }
    

    On the callback you get user access token:

    public ActionResult callback()
    {
        // Here we skip all the error handling and null checking
        var auth = HttpContext.GetOwinContext().Authentication;
        var loginInfo = auth.GetExternalLoginInfo();
        var identityInfo = auth.GetExternalIdentity(DefaultAuthenticationTypes.ExternalCookie);
    
        var email = loginInfo.Email // klaatuveratanecto@gmail.com
        var name = loginInfo.ExternalIdentity.Name  // Klaatu Verata Necto
        var provider = loginInfo.Login.LoginProvider // Facebook | Google
    
        var fb_access_token = loginInfo.identityInfo.FindFirstValue("FacebookAccessToken");
        // Save this token to database, for the purpose of this example we will save it to Session.
        Session['fb_access_token'] = fb_access_token;
        // ...                   
    }
    

    Which then you can use to post to user's feed or page

    public class postcontroller : basecontroller
    {                      
            public ActionResult wall()
            {
                var client = new FacebookClient( Session['fb_access_token'] as string);
                var args = new Dictionary();
                args["message"] = "Klaatu Verata N......(caugh, caugh)";
    
                try
                {
                    client.Post("/me/feed", args); // post to users wall (feed)
                    client.Post("/{page-id}/feed", args); // post to page feed
                }
                catch (Exception ex)
                {
                    // Log if anything goes wrong 
                }
    
            }
    }
    

    I posted full example over here: https://klaatuveratanecto.com/facebook-wall-feed-posting-asp-net-mvc/

提交回复
热议问题