当.net抛出webeexception ((400) Bad Request)时如何处理WebResponse
本文关键字:何处理 WebResponse 处理 Bad 抛出 net webeexception Request | 更新日期: 2023-09-27 18:10:03
我正在使用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抛出webeexception和我的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
块中获取数据。