Integracion_DGA/DAS/ApiService.cs

109 lines
4.3 KiB
C#

using System.Text;
using Newtonsoft.Json;
namespace BLL.Integracion_DGA
{
public class ApiService
{
private readonly HttpClient _httpClient;
public ApiService(HttpClient httpClient)
{
_httpClient = httpClient ?? throw new ArgumentNullException(nameof(httpClient));
}
public async Task<string> GetApiResponseAsync(string apiUrl, Dictionary<string, string> headers = null)
{
using (var httpClient = new HttpClient())
{
// Configura la URL base
httpClient.BaseAddress = new Uri(apiUrl);
var request = new HttpRequestMessage(HttpMethod.Get, apiUrl);
// Configura los encabezados personalizados si se proporcionan
if (headers != null)
{
foreach (var header in headers)
{
request.Headers.Add(header.Key, header.Value);
}
}
// Realiza la solicitud con la solicitud personalizada
try
{
var response = await httpClient.SendAsync(request);
if (response.IsSuccessStatusCode)
{
return await response.Content.ReadAsStringAsync();
}
else
{
// Maneja errores aquí según sea necesario.
Console.WriteLine($"Error en la solicitud: {response.StatusCode}");
throw new HttpRequestException($"Error en la solicitud HTTP. Código de estado: {response.StatusCode}");
}
}
catch (Exception ex)
{
Console.WriteLine("Error: " + ex.Message);
throw new Exception($"Error en la solicitud HTTP: {ex.Message}");
// Maneja la excepción según sea necesario
}
}
}
public async Task<string> PostApiResponseAsync(string apiUrl, Dictionary<string, string> headers = null, object data = null)
{
using (var httpClient = new HttpClient())
{
try
{
httpClient.BaseAddress = new Uri(apiUrl);
var request = new HttpRequestMessage(HttpMethod.Post, apiUrl);
// Serializa el objeto data a JSON
//string jsonData = JsonSerializer.Serialize(data);
string jsonData = JsonConvert.SerializeObject(data);
// Crea el contenido de la solicitud HTTP con el cuerpo JSON
HttpContent contenido = new StringContent(jsonData, Encoding.UTF8, "application/json");
request.Content = contenido;
// Configura los encabezados personalizados si se proporcionan
if (headers != null)
{
foreach (var header in headers)
{
request.Headers.Add(header.Key, header.Value);
}
}
// Realiza la solicitud POST
HttpResponseMessage response = await httpClient.SendAsync(request);
// Verifica si la solicitud fue exitosa
if (response.IsSuccessStatusCode)
{
// Lee la respuesta como una cadena
return await response.Content.ReadAsStringAsync();
}
else
{
// La solicitud no fue exitosa, maneja el error según sea necesario
Console.WriteLine($"Error en la solicitud HTTP. Código de estado: {response.StatusCode}");
throw new HttpRequestException($"Error en la solicitud HTTP. Código de estado: {response.StatusCode}");
}
}
catch (Exception ex)
{
// Maneja excepciones si ocurren
Console.WriteLine($"Error en la solicitud HTTP: {ex.Message}");
throw new Exception($"Error en la solicitud HTTP: {ex.Message}");
}
}
}
}
}