开发者

400 bad request error when requesting Access_Token for facebook

I've some problems with requesting an access token from facebook. First it worked. But now it doesn't work anymore and i don't think that i changed something in the specific codelines.

Here's how i've been doing it:

public static String requestAccesToken(string code)
    {
        //create the constructor with post type and few data
        MyWebRequest myRequest = new MyWebRequest("https://graph.facebook.com/oauth/access_token?", "POST", "client_id=" + getAppID() + "&client_secret=" + getAppSecret() + "&code=" + code + "&redirect_uri=http://localhost:57689/search.aspx");

        string accessToken = myRequest.GetResponse().Split('&')[0];  
        accessToken = accessToken.Split('=')[1];

        return accessToken;
    }
 public static String getAppID()
    {
        return System.Configuration.ConfigurationManager.AppSettings["AppID"].ToString();
    }

    public static String getAppSecret()
    {
        return System.Configuration.ConfigurationManager.AppSettings["AppSecret"].ToString();
    }

Class: MyWebrequest:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Net;
using System.IO;
using System.Text;

public class MyWebRequest
{
    private WebRequest request;
    private Stream dataStream;

    private string status;

    public String Status
    {
        get
        {
            return status;
        }
        set
        {
            status = value;
        }
    }
    /*
     * simply download the data of the web page
     */
    public MyWebRequest(string url)
    {
        // Create a request using a URL that can receive a post.

        request = WebRequest.Create(url);
    }

    public MyWebRequest(string url, string method)
        : this(url)
    {

        if (method.Equals("GET") || method.Equals("POST"))
        {
            // Set the Method property of the request to POST.
            request.Method = method;
        }
        else
        {
            throw new Exception("Invalid Method Type");
        }
    }

    public MyWebRequest(string url, string method, string data)
        : this(url, method)
    {

        // Create POST data and convert it to a byte array.
        string postData = data;
        byte[] byteArray = Encoding.UTF8.GetBytes(postData);

        // Set the ContentType property of the WebRequest.
        request.ContentType = "application/x-www-form-urlencoded";

        // Set the ContentLength property of the WebRequest.
        request.ContentLength = byteArray.Length;

        // Get the request stream.
        dataStream = request.GetRequestStream();

        // Write the data to the request stream.
        dataStream.Write(byteArray, 0, byteArray.Length);

        // Close the Stream object.
        dataStream.Close();

    }

    public string GetResponse()
    {
        // Get the original response.
        WebResponse response = request.GetResponse(); //400 ERROR BAD REQUEST

        this.Status = ((HttpWebResponse)response).StatusDescription;

        // Get the stream containing all content returned by the requested server.
        dataStream = response.GetResponseStream();

        // Open the stream using a StreamReader for easy access.
        StreamReader reader = new StreamReader(dataStream);

        /开发者_运维问答/ Read the content fully up to the end.
        string responseFromServer = reader.ReadToEnd();

        // Clean up the streams.
        reader.Close();
        dataStream.Close();
        response.Close();

        return responseFromServer;
    }

}

Where is this going wrong? I'm realy stuck with this one.

Thank you for reading!


I had the same problem yesterday. I fixed it using WebClient instead of WebRequest. I think the Http error was appearing because the response was using gzip encode and because I was sending some parameters in the redirect_uri (I am not sure if that was the reason, but it is working now):

            try
            {
                WebClient wc = new WebClient();

                wc.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip");

                //that solves the problem with GZIP partially:
                wc.Proxy = null;

                using (StreamReader reader = new StreamReader(wc.OpenRead(url)))
                {
                    string conteudo = reader.ReadToEnd();

                    ...
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜