net - response request c#
¿Cómo procesar WebResponse cuando.NET lanza WebException((400) Bad Request)? (2)
La WebException
todavía tiene la respuesta "real" en la propiedad de Response
(suponiendo que haya una respuesta) para que pueda obtener los datos de esa dentro del bloque catch
.
Estoy usando Facebook Graph Api y tratando de obtener datos de usuario. Estoy enviando token de acceso de usuario y en caso de que este token haya caducado o no sea válido, Facebook devuelve el código de estado 400 y esta respuesta:
{
"error": {
"message": "Error validating access token: The session is invalid because the user logged out.",
"type": "OAuthException"
}
}
El problema es que cuando uso este código C #:
try {
webResponse = webRequest.GetResponse(); // in case of status code 400 .NET throws WebException here
} catch (WebException ex) {
}
Si el código de estado es 400 .NET lanza WebException y my webResponse
es null
después de que se webResponse
excepción, por lo que no tengo la oportunidad de procesarlo. Quiero hacerlo para asegurarme de que el problema esté en el token caducado y no en otro lugar.
¿Hay una manera de hacerlo?
Gracias.
Usar un bloque try / catch como este y procesar el mensaje de error apropiadamente debería funcionar bien:
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
}
}
}
}
}
Sin embargo, usar Facebook C # SDK hace que todo esto sea realmente fácil para que no tenga que procesarlo usted mismo.