Facebook Graph Apiを使用して、ユーザーデータを取得しようとしています。ユーザーアクセストークンを送信していますが、このトークンの有効期限が切れているか、無効な場合、Facebookはステータスコード400とこの応答を返します。
{
"error": {
"message": "Error validating access token: The session is invalid because the user logged out.",
"type": "OAuthException"
}
}
問題は、このC#コードを使用すると:
try {
webResponse = webRequest.GetResponse(); // in case of status code 400 .NET throws WebException here
} catch (WebException ex) {
}
ステータスコードが400の場合、.NETはWebExceptionをスローし、例外がキャッチされた後、私のwebResponse
はnull
になるため、処理する機会がありません。問題が期限切れトークンにあり、他の場所にないことを確認するために、それを行いたいと思います。
それを行う方法はありますか?
ありがとう。
次のようなtry/catchブロックを使用し、エラーメッセージを適切に処理することで問題なく動作します。
var request = (HttpWebRequest)WebRequest.Create(address);
try {
using (var response = request.GetResponse() as HttpWebResponse) {
if (request.HaveResponse && response != null) {
using (var reader = new StreamReader(response.GetResponseStream())) {
string result = reader.ReadToEnd();
}
}
}
}
catch (WebException wex) {
if (wex.Response != null) {
using (var errorResponse = (HttpWebResponse)wex.Response) {
using (var reader = new StreamReader(errorResponse.GetResponseStream())) {
string error = reader.ReadToEnd();
//TODO: use JSON.net to parse this string and look at the error message
}
}
}
}
}
ただし、 Facebook C#SDK を使用すると、このすべてが非常に簡単になるため、これを自分で処理する必要はありません。
WebException
の Response
プロパティにはまだ「実際の」応答があり(応答があったとして)、catch
ブロック内のデータを取得できます。