Прежде всего в моем тестировании я обнаружил, что DownloadStringCompleted запускается.
Однако попытка прочитать свойство args Result
при событии вызовет ошибку.Вам необходимо проверить свойство args Error
события, чтобы определить, произошла ли ошибка.Если оно имеет это свойство, оно будет содержать ссылку на WebException
.
К счастью, WebException
имеет объект Response
, который имеет тип WebResponse
.Вы можете получить строку ответа, используя небольшую функцию: -
string StringFromWebResponse(WebResponse response)
{
using (StreamReader reader = new StreamReader(response.GetResponseStream()))
{
return reader.ReadToEnd();
}
}
Но есть проблема.Это доступно только при использовании стека ClientHTTP, а не стека BrowserHTTP.Итак, вам нужно что-то вроде этой строки кода в вашем приложении: -
WebRequest.RegisterPrefix("https://graph.facebook.com", System.Net.Browser.WebRequestCreator.ClientHttp);
Итак, код, подобный этому, будет работать: -
WebClient client = new WebClient();
client.DownloadStringCompleted += (s, args) =>
{
string result;
if (args.Error == null)
{
result = args.Result;
//Do something with the expected result
}
else
{
WebException err = args.Error as WebException;
result = StringFromWebResponse(err.Response);
// Do something with the error result
}
};
client.DownloadStringAsync(new Uri("https://graph.facebook.com/me?access_token=your_token", UriKind.Absolute));
О, но, возможно, есть другая проблема.Я ничего не знаю об API Facebook, но если есть зависимость от куки, то по умолчанию стек ClientHTTP не управляет куки сам.Для правильной обработки файлов cookie необходимо назначить общий CookieContainer
каждому используемому HttpWebRequest
.WebClient
не позволяет получить доступ к используемому объекту WebRequest
, поэтому вам нужно перейти к использованию WebRequest
/ WebResponse
напрямую.