Ошибка 400 неверных запросов при запросе Access_Token для Facebook - PullRequest
1 голос
/ 02 апреля 2011

У меня возникли проблемы с запросом токена доступа из Facebook.Сначала это сработало.Но теперь это больше не работает, и я не думаю, что я что-то изменил в определенных кодах.

Вот как я это делал:

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();
    }

Класс: 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;
    }

}

Где это происходит не так?Я действительно застрял с этим.

Спасибо за чтение!

1 Ответ

4 голосов
/ 28 июля 2011

У меня вчера была такая же проблема. Я исправил это, используя WebClient вместо WebRequest. Я думаю, что Http error появлялся, потому что в ответе использовалось gzip encode и потому что я отправлял некоторые параметры в redirect_uri (я не уверен, что это было причиной, но сейчас работает):

            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();

                    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...