当.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被捕获后我的webResponsenull ,所以我没有机会处理它。 我想这样做,以确保问题是在过期的令牌,而不是其他地方。

有没有办法做到这一点?

谢谢。

使用这样的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使得这一切非常简单,所以你不必自己处理。

WebExceptionResponse属性中仍然有“真实”的Response (假设有响应),所以你可以从catch块中获取数据。