Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@flicardie
Last active February 7, 2021 21:37
Show Gist options
  • Star 4 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
  • Save flicardie/d32e1a7e2c9a921c90ec9aa7f3fccc61 to your computer and use it in GitHub Desktop.
Save flicardie/d32e1a7e2c9a921c90ec9aa7f3fccc61 to your computer and use it in GitHub Desktop.
Ejemplo de llamada a WebApi para obtener resultados en una lista y para mandar datos a la WebApi #WebApi #Json #Csharp

Ejemplo de uso para hacer GET a una API

/// Ejemplo de llamada a API por medio de verbo GET 
public async Task<List<PeriodoNominaBE>> Listar()
{

    //return null;
    List<PeriodoNominaBE> lista = null;

    try
    {
        using (HttpClient client = new HttpClient())
        {
            client.BaseAddress = new Uri(apiUrl);
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", ConfigurationManager.AppSettings["token"].ToString());
            client.Timeout = TimeSpan.FromMinutes(10);
             //Al infinito
                    client.Timeout =  new TimeSpan(0, 0, 0, 0, -1);
            HttpResponseMessage response = await client.GetAsync(apiUrl + "PeriodoNomina/Listar/");
            if (response.IsSuccessStatusCode)
            {
                // Si se va a recibir un JSON bastante grande
                // https://stackoverflow.com/questions/56398881/how-to-read-json-payload-of-a-large-response
                
              var stream = await response.Content.ReadAsStreamAsync();

              using (StreamReader sr = new StreamReader(stream))
              using (JsonReader reader = new JsonTextReader(sr))
              {
                   JsonSerializer serializer = new JsonSerializer();
                   //var o = serializer.Deserialize<SomeClassMatchingTheJsonSchema>(reader);
                   lista = serializer.Deserialize<List<PeriodoNominaBE>>(reader);
              }                        
            
                var jsonPuro = await response.Content.ReadAsStringAsync();
                var jsonDesarializado = Newtonsoft.Json.JsonConvert.DeserializeObject(jsonPuro);


                lista = JsonConvert
                        .DeserializeObject<List<PeriodoNominaBE>>(jsonPuro.ToString()
                        , new JsonSerializerSettings()
                        {
                            MissingMemberHandling =
                                MissingMemberHandling.Ignore
                        });
                
                
                //  var lista2  = JsonConvert.DeserializeObject<PeriodoPago>(data);

            }
        }

        return lista;
    }
    catch (Exception ex)
    {
        throw;
    }
}

Ejemplo de uso para hacer POST a una API

public async Task<String> Crear(MovimientoEspecialBE entidad)
{

    //return null;
    String codigoMovimientoEspecial = String.Empty;

    try
    {
        using (HttpClient client = new HttpClient())
        {

            //apiUrl = "http://localhost:50356/api/MovimientoEspecial/crear";
            apiUrl += "MovimientoEspecial/Crear";

            var informacionAMandar = Newtonsoft.Json.JsonConvert.SerializeObject(entidad, 
                            Newtonsoft.Json.Formatting.None, 
                            new JsonSerializerSettings { 
                                NullValueHandling = NullValueHandling.Ignore
                            });

            client.BaseAddress = new Uri(apiUrl);
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", ConfigurationManager.AppSettings["token"].ToString());
            client.Timeout = TimeSpan.FromMinutes(10);
            
            
            HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "");
            request.Content = new StringContent(informacionAMandar,Encoding.UTF8, "application/json");//CONTENT-TYPE header
            HttpResponseMessage response = await client.SendAsync(request);
                    
                    
            if (response.IsSuccessStatusCode)
            {
                var jsonPuro = await response.Content.ReadAsStringAsync();
                var jsonDesarializado = Newtonsoft.Json.JsonConvert.DeserializeObject(jsonPuro);

                codigoMovimientoEspecial = jsonDesarializado.ToString();

                 
            }
        }

        return codigoMovimientoEspecial;
    }
    catch (Exception ex)
    {
        throw;
    }
}

Incluir información de tokens de seguridad

client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", ConfigurationManager.AppSettings["token"].ToString());

Incluir tiempo de espera

 client.Timeout = TimeSpan.FromMinutes(10);

Definir rutas y parámetros opcionales

Uso de rutas : Para utilizar rutas específicas usamos el atributo Route

Parámetros Opcionales : Para uso de parámetros opcionales debemos agregar el simbolo "?" al final del parámetro, como el ejemplo siguiente

[HttpGet]
[Route("Api/ConfiguracionGeneral/Listar/{codigoConfiguracionGeneral?}/{nombreConfiguracionGeneral?}")]
public HttpResponseMessage Listar(int codigoConfiguracionGeneral = 0, string nombreConfiguracionGeneral = "")
{
    try
    {
        //db.Configuration.LazyLoadingEnabled = false;
        //db.Configuration.ProxyCreationEnabled = false;
        var query = db.ConfiguracionGeneral
            .Where(x => x.Eliminado == false
            && x.Activo == true
            && x.CodigoConfiguracionGeneral == (codigoConfiguracionGeneral == 0 ? x.CodigoConfiguracionGeneral : codigoConfiguracionGeneral)
            && x.ConfiguracionGeneral == (nombreConfiguracionGeneral == "" || nombreConfiguracionGeneral == String.Empty ? x.ConfiguracionGeneral : nombreConfiguracionGeneral

            )
            )
            .Select(x => new
            {
                x.CodigoConfiguracionGeneral,
                x.Descripcion,
                x.Activo,
                x.Eliminado,
                x.UsuarioInserto,
                x.FechaInserto
                ,
                ValorDetalleConfiguracion = x.SCTDetalleConfiguracionGeneral.Where(y => y.CodigoConfiguracionGeneral == x.CodigoConfiguracionGeneral && y.Activo == true && y.Eliminado == false).FirstOrDefault().Valor ?? ""

            })
            .ToList();

        if (query != null && query.Count() > 0)
        {
            return Request.CreateResponse(HttpStatusCode.OK, query);
        }
        else
        {
            return Request.CreateResponse(HttpStatusCode.NotFound);
        }
    }
    catch (Exception ex)
    {
        return Request.CreateResponse(HttpStatusCode.InternalServerError, ex.GetBaseException().Message);
    }
}

Ejemplo de llamada Genérica

public async Task<DataSet> ListarEmpleadosDS(EmpleadoEstadoPorEmpresaBE entidad)
{
       string[] parametros = { entidad.CodigoEmpresa.ToString()
                    , entidad.CodigoTipoNomina.ToString()
                    , entidad.CodigoAgrupacionDePagoTipoPeriodoNomina.ToString()
                      , entidad.CodigoEmpleado.ToString()
                    };
       DataSet resultado = await get<DataSet>("Empleado", parametros);
       return resultado;

}


 public async Task<TClass> get<TClass>(string metodo, string[] parametros, bool queryString = false) {
            try
            {

                string parametrosUrl = "";
                string baseUrl = InicializarCadena();

                if (queryString)
                {
                    string parName = parametros[0];
                    parametros = parametros.Skip(1).ToArray();
                    for(int i = 0; i < parametros.Length; i++) {
                        string simbolo = i == 0 ? "?" : "&";
                        parametrosUrl = simbolo + parName + "["+i+"]=" + parametros[i];
                    }
                }
                else {
                    string simbolo = metodo == "" ? "" : "/";
                    foreach (string parametro in parametros) {
                        parametrosUrl += simbolo + parametro;
                        simbolo = "/";
                    }
                }

                string url = baseUrl + metodo + parametrosUrl;
                using (HttpClient client = new HttpClient())
                {
                  
                    client.BaseAddress = new Uri(url);
                    client.Timeout = TimeSpan.FromSeconds(30);
                    client.DefaultRequestHeaders.Accept.Clear();
                    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                    client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", ConfigurationManager.AppSettings["token"].ToString());
                    client.Timeout = TimeSpan.FromMinutes(10);
                    HttpResponseMessage response = await client.GetAsync(url);

                    //var jsonPuro = await response.Content.ReadAsStringAsync();

                    if (response.IsSuccessStatusCode)
                    {
                        var jsonPuro = await response.Content.ReadAsStringAsync();
                        var objeto = JsonConvert
                                .DeserializeObject<TClass>(jsonPuro.ToString()
                                , new JsonSerializerSettings()
                                {
                                    MissingMemberHandling =
                                        MissingMemberHandling.Ignore
                                });

                        return objeto;
                    }
                    else {
                        return default(TClass);
                    }
                }
            }
            catch (Exception ex) {
                throw ex;   
            }
        }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment