65.9K
CodeProject is changing. Read more.
Home

Posting on a Facebook page in ASP.NET

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.79/5 (9 votes)

Aug 2, 2012

CPOL

1 min read

viewsIcon

83727

How to post on a Facebook page from ASP.NET.

Introduction

This article explains how to post on a Facebook page from ASP.NET.

Using the code

First register your application and get the client ID. Then after the user authenticates your app, you will get an Access Token.

Authentication process

First, place two buttons for authorization on a webform. In the authorization button click event, write the following code. We set Offline access, Publish stream permission, and manage Pages Permission of users to post on page.

protected void Authorization_Click(object sender, EventArgs e)
{
    //     Your Website Url which needs to Redirected
    string callbackUrl = "xxxxxxx";

    //Client Id Which u Got when you Register You Application
    string   FacebookClientId="xxxx";
    Response.Redirect(string.Format("https://graph.facebook.com/oauth/" + 
      "authorize?client_id={0}&redirect_uri={1}&scope=offline_access," + 
      "publish_stream,read_stream,publish_actions,manage_pages",
      FacebookClientId, callbackUrl));
}

After user authorizes, you will receive an Oauth code. Use the below URL to get the access token for that user.

https://graph.facebook.com/oauth/access_token?
client_id=YOUR_APP_ID&redirect_uri=YOUR_URL&
client_secret=YOUR_APP_SECRET&code=The code U got from face book after Redirecting

This will return the User Access token, save it for further use. After this we need to get the Pages information of the user.

Use the below method to get page tokens and IDs:

public void getpageTokens()
{
    // User Access Token  we got After authorization
    string UserAccesstoken="xxxxxx";
    string url = string.format("https://graph.facebook.com/" + 
                 "me/accounts?access_token={0}",UserAccesstoken);

    webRequest.ContentType = "application/x-www-form-urlencoded";
    webRequest.Method = "Get";
            
    var webResponse = webRequest.GetResponse();
    StreamReader sr = null;
                    
    sr = new StreamReader(webResponse.GetResponseStream());
    var vdata = new Dictionary<string, string>();
    string returnvalue = sr.ReadToEnd();

    //using Jobject to parse result
    JObject mydata = JObject.Parse(returnvalue);
    JArray data = (JArray)mydata["data"];
              
    PosttofacePage(data);
}

I used the Json.net DLL to parse information from Facebook. The DLL can be found here.

Now it is time to post data to pages:

public void PosttofacePage(JArray obj)
{
    for (int i = 0; i < obj.Count; i++)
    {
        string name = (string)obj[i]["name"];
        string Accesstoken = (string)obj[i]["access_token"];
        string category = (string)obj[i]["category"];
        string id = (string)obj[i]["id"];

        string Message = "Test message";

        if (string.IsNullOrEmpty(Message)) return;
                    
        // Append the user's access token to the URL
        string  path=String.Format("https://graph.facebook.com/{0}",id);
                     
        var url = path+"/feed?" +
        AppendKeyvalue("access_token",AccessToken);

        // The POST body is just a collection of key=value pairs,
        // the same way a URL GET string might be formatted
        var parameters = ""
        + AppendKeyvalue("name", "name")
        + AppendKeyvalue("caption", "a test caption")
        + AppendKeyvalue("description", "test description ")
        + AppendKeyvalue("message", Message);
        // Mark this request as a POST, and write the parameters
        // to the method body (as opposed to the query string for a GET)
        var webRequest = WebRequest.Create(url);
        webRequest.ContentType = "application/x-www-form-urlencoded";
        webRequest.Method = "POST";
        byte[] bytes = System.Text.Encoding.ASCII.GetBytes(parameters);
        webRequest.ContentLength = bytes.Length;
        System.IO.Stream os = webRequest.GetRequestStream();
        os.Write(bytes, 0, bytes.Length);
        os.Close();

        // Send the request to Facebook, and query the result to get the confirmation code
        try
        {
            var webResponse = webRequest.GetResponse();
            StreamReader sr = null;
            try
            {
                sr = new StreamReader(webResponse.GetResponseStream());
                string PostID = sr.ReadToEnd();
            }
            finally
            {
                if (sr != null) sr.Close();
            }
        }
        catch (WebException ex)
        {
            // To help with debugging, we grab
            // the exception stream to get full error details
            StreamReader errorStream = null;
            try
            {
                errorStream = new StreamReader(ex.Response.GetResponseStream());
                this.ErrorMessage = errorStream.ReadToEnd();
            }
            finally
            {
                if (errorStream != null) errorStream.Close();
            }
        }
    }
}

I used the AppendKeyvalue method to append key value pairs:

public static string AppendKeyvalue(string key, string value)
{
    return string.Format("{0}={1}&", HttpUtility.UrlEncode(key), HttpUtility.UrlEncode(value));
}

The above code returns the post ID if posted successfully.

Note: Access tokens are different for different users.

That’s it. We have successfully posted a new post on a user's page. Happy coding.