Cómo atrapar y manejar correctamente errores en una solicitud Http de tipo “get” a la api de Facebook.
Estoy tratando de recibir un token de acceso de la API de gráficos de Facebook usando el código recibido de Facebook. Esta es mi primera vez trabajando con APIs en .NET CORE. El código parece funcionar bien, sin embargo, no estoy seguro si estoy manejando la respuesta y capturando las excepciones de la manera correcta. Aunque puedo usar TRY CATCH, aún no me siento muy cómodo con eso. Me gustaría hacer que este método sea lo más robusto posible.
Tu ayuda es muy apreciada.
Clase de Manejo
public class FacebookService : IFacebookService
{
private readonly HttpClient _httpClient;
private readonly IConfiguration configuration;
public FacebookService(HttpClient httpClient, IConfiguration iConfig)
{
_httpClient = httpClient;
configuration = iConfig;
}
public async Task<string> GetShortLiveToken(string code)
{
try
{
string appId = configuration.GetSection("FacebookApp").GetSection("AppID").Value;
string appSecret = configuration.GetSection("FacebookApp").GetSection("AppSecret").Value;
var getTokenUri = $"oauth/access_token?client_id={appId}&client_secret={appSecret}&code={code}&redirect_uri=https://localhost:44373/Home/HandleFbAccess";
var response = await _httpClient.GetAsync(getTokenUri);
if (response.IsSuccessStatusCode)
{
return await response.Content.ReadAsStringAsync();
}
else
{
return response.ReasonPhrase;
}
}
catch(Exception ex)
{
throw ex;
}
}
public async Task<string> GetLongLiveToken(string shortlivedtoken)
{
throw new NotImplementedException();
}
}
Invocando el Método
csharp
public async Task<iactionresult> HandleFbAccess(string code, string granted_scopes)
{
try
{
var result = await _facebookService.GetShortLiveToken(code);
// más cosas por hacer aquí
// .....
return View("Index");
}
catch(Exception ex)
{
throw ex;
}
}
davy.ai
Recomendaciones para manejar la API de Gráficos de Facebook en .NET CORE
Aquí hay algunas recomendaciones para hacer que el código sea más robusto al manejar la API de Gráficos de Facebook utilizando C# y .NET CORE:
1. Refactorización de la Clase
FacebookService
1.1 Lectura de la Configuración
En lugar de usar
.GetSection()
, considere usar.GetValue()
para obtener los valores del archivo de configuraciónappsettings.json
:1.2 Verificación de Excepciones usando
Try-Catch
En lugar de volver a lanzar una excepción en el método, captúrela y devuelva un mensaje de error apropiado. Esto protege el código de nivel superior de conocer directamente los detalles de la excepción, centralizando así el manejo de excepciones en la clase de servicio.
1.3 Deserialización del Texto de Respuesta
El texto de respuesta debe deserializarse en el objeto apropiado, no devolverse como una cadena. Aquí hay un ejemplo de deserialización de una respuesta JSON:
2. Refactorización del método
HandleFbAccess
2.1 Verificación de Valores Nulos
Considere verificar los valores nulos al invocar el método
GetShortLiveToken
:2.2 Captura de Excepciones
Utilice el manejo estructurado de excepciones para las llamadas al servicio. Esto le permitirá capturar excepciones específicas y devolver mensajes de error apropiados. Por ejemplo:
Código Final
Clase
FacebookService
actualizada:Método HandleFbAccess(string code)
HandleFbAccess
actualizado:“`csharp
public async Task
{
// verificar si el código es nulo o vacío
if (string.IsNullOrEmpty(code))
{
return BadRequest(“El parámetro del código no puede ser nulo o vacío.”);
}
}
“`