REST API в c # facebook - PullRequest
       19

REST API в c # facebook

1 голос
/ 27 февраля 2010

Я пытаюсь использовать REST API для получения списков друзей с fb.

ArrayObject заполнен:

  • SecretKey
  • API_KEY Method = "facebook.friends.get"
  • call_id uid
  • v = 1,0
  • sig = md5 code

И я пытаюсь позвонить с:

public string GetResponse(ArrayObject Parameters)
{
    // Set the encoding type
    theRequest.ContentType = "application/x-www-form-urlencoded";

    theRequest.ContentLength = Parameters.getData().Length;

    // We write the parameters into the request
    StreamWriter sw = new StreamWriter(theRequest.GetRequestStream());
    sw.Write(Parameters.getData());
    sw.Flush();
    sw.Close();

    // Execute the query
    theResponse = (HttpWebResponse)theRequest.GetResponse();
    StreamReader sr = new StreamReader(theResponse.GetResponseStream());
    return sr.ReadToEnd();
}

Но я получаю исключение здесь:

theResponse = (HttpWebResponse) theRequest.GetResponse();

с сообщением:

Удаленный сервер вернул ошибку: (500) Внутренняя ошибка сервера.

Ответы [ 2 ]

2 голосов
/ 27 февраля 2010

Ваш код должен выглядеть следующим образом, так как некоторые ресурсы не используются должным образом:

public string GetResponse(ArrayObject Parameters)
{
    // Set the encoding type
    theRequest.ContentType = "application/x-www-form-urlencoded";

    theRequest.ContentLength = Parameters.getData().Length;

    // We write the parameters into the request
    using (StreamWriter sw = new StreamWriter(theRequest.GetRequestStream()))
    {
        sw.Write(Parameters.getData());
        sw.Flush();
    }

    // Execute the query
    theResponse = (HttpWebResponse)theRequest.GetResponse();

    using (StreamReader sr = new StreamReader(theResponse.GetResponseStream()))
    {
        return sr.ReadToEnd();
    }
}

Кроме того, кажется, что вы кэшируете экземпляр HttpWebResponse . Это плохая идея, поскольку она происходит от WebResponse , который реализует IDisposable. Вызов Dispose для этого экземпляра важен для того, чтобы избавиться от ресурсов, использованных при создании запроса и чтении ответа.

Как говорится, есть ли причина, по которой вы не используете Facebook Developer Toolkit ? Он содержит классы, которые инкапсулируют большинство вызовов API RESTful, а также механизмы, которые вы можете использовать повторно для генерации новых вызовов (с небольшой переработкой кода), если необходимо.

0 голосов
/ 27 февраля 2010

Я думаю, это потому, что вы закрываете поток запросов. Попробуйте переместить

sw.Close();

строка после получения ответа.

РЕДАКТИРОВАТЬ: Посмотрел некоторые из моего старого кода. Исправил мой собственный ответ.

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