当.NET抛出WebException((400)Bad Request)时如何处理WebResponse?
我正在使用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,并且在exception被捕获后我的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
属性中仍然有“真实”的Response
(假设有响应),所以你可以从catch
块中获取数据。