//========================================================================================================= //========================================================================================================= //BUSQUEDA DE USUARIOS (CONSUMO DE SERVICIOS WEB) public async Task <List <ResponseQueryAdmin> > ListaPersonasHttpClient(int SeleccionBusqueda, string Dato) { //SE CREA E INICIALIZA LA VARIABLE QUE CONTENDRA EL URL string url = App.BaseUrl + "/queryadmin"; //SE CREA E INICIALIZA LA VARIABLE QUE RECIBIRA LA LISTA DE USUARIOS ENCONTRADOS List <ResponseQueryAdmin> lista = null; //SE CREA E INICIALIZA LA VARIABLE QUE SERVIRA DE MODELO PARA EL OBJETO JSON ENVIADO EN LA SOLICITUD var model = new RequestQueryAdmin() { Parametro = Dato, UserId = Persona.Cedula, }; //SE CREA E INICIALIZA LA VARIABLE QUE RECIBIRA LA RESPUESTA DE LA SOLICITUD HTTP HttpResponseMessage response = new HttpResponseMessage(); //SE CREA E INICIALIZA LA VARIABLE QUE VERIFICARA EL ESTADO DE CONEXION A INTERNET var current = Connectivity.NetworkAccess; //SE VERIFICA SI EL DISPOSITIVO SE ENCUENTRA CONECTADO A INTERNET if (current == NetworkAccess.Internet) { //EL EQUIPO SE ENCUENTRA CONECTADO A INTERNET //SE INICIA EL CICLO TRY...CATCH try { //INICIAMOS EL SEGMENTO DEL CODIGO EN EL CUAL REALIZAREMOS EL CONSUMO DE SERVICIOS WEB MEDIANTE //LA INICIALIZACION Y CREACION DE UNA VARIABLE QUE FUNCIONARA COMO CLIENTE EN LAS SOLICITUDES //Y RESPUESTAS ENVIADAS Y RECIBIDAS POR EL SERVIDOR (WEB API) //---------------------------------------------------------------------------------------------- //NOTA: CUANDO SE REALIZA LA CREACION E INICIALIZACION DE LA VARIABLE DEL TIPO HttpClient SE //HACE UN LLAMADO A UN METODO ALOJADO EN LA CLASE "App" Y QUE ES ENVIADO COMO PARAMETRO DEL //TIPO HttpClientHandler => //---------------------------------------------------------------------------------------------- using (HttpClient client = new HttpClient(App.GetInsecureHandler())) { //SE DA SET AL TIEMPO MAXIMO DE ESPERA PARA RECIBIR UNA RESPUESTA DEL SERVIDOR client.Timeout = TimeSpan.FromSeconds(App.TimeInSeconds); //SE REALIZA LA CONVERSION A OBJETO JSON var json = JsonConvert.SerializeObject(model); //SE AÑADE EL OBJETO JSON RECIEN CREADO COMO CONTENIDO BODY DEL NUEVO REQUEST HttpContent httpContent = new StringContent(json, Encoding.UTF8, "application/json"); //SE HACE LA CONFIGURACION DE LOS HEADERS DEL REQUEST client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); //-------------------------------------------------------------------------------------------------------- //DEPENDIENDO DEL VALOR QUE POSEA SeleccionBusqueda: //(EN ESTE CASO SOLO PUEDE TENER 4, QUE SON: 0-ID, 1-NUMERO DE FICHA, 2-NOMBRES, 3-APELLIDOS, 4-USERNAME) //-------------------------------------------------------------------------------------------------------- switch (SeleccionBusqueda) { //CASO BUSQUEDA POR CEDULA case 0: //SE TERMINA DE ESPECIFICAR EL URL AL CUAL SE DEBE REALIZAR LA SOLICITUD CUANDO ES BUSQUEDA POR CEDULA url = url + "/cedula"; //SE HACE EL ENVIO DE LA SOLICITUD response = await client.PostAsync(url, httpContent); break; //CASO BUSQUEDA POR NUMERO DE FICHA case 1: //SE TERMINA DE ESPECIFICAR EL URL AL CUAL SE DEBE REALIZAR LA SOLICITUD CUANDO ES BUSQUEDA POR CEDULA url = url + "/ficha"; //SE HACE EL ENVIO DE LA SOLICITUD response = await client.PostAsync(url, httpContent); break; //CASO BUSQUEDA POR NOMBRE case 2: //SE TERMINA DE ESPECIFICAR EL URL AL CUAL SE DEBE REALIZAR LA SOLICITUD CUANDO ES BUSQUEDA POR CEDULA url = url + "/nombres"; //SE HACE EL ENVIO DE LA SOLICITUD response = await client.PostAsync(url, httpContent); break; //CASO BUSQUEDA POR APELLIDO case 3: //SE TERMINA DE ESPECIFICAR EL URL AL CUAL SE DEBE REALIZAR LA SOLICITUD CUANDO ES BUSQUEDA POR CEDULA url = url + "/apellidos"; //SE HACE EL ENVIO DE LA SOLICITUD response = await client.PostAsync(url, httpContent); break; //CASO BUSQUEDA POR USERNAME case 4: //SE TERMINA DE ESPECIFICAR EL URL AL CUAL SE DEBE REALIZAR LA SOLICITUD CUANDO ES BUSQUEDA POR CEDULA url = url + "/username"; //SE HACE EL ENVIO DE LA SOLICITUD response = await client.PostAsync(url, httpContent); break; } } } //SECCION DE CODIGO QUE SE EJECUTA CUANDO EL COMANDO DE SOLICITUD HTTP FALLE catch (Exception ex) when(ex is HttpRequestException || ex is Javax.Net.Ssl.SSLException || ex is Javax.Net.Ssl.SSLHandshakeException || ex is System.Threading.Tasks.TaskCanceledException) { //SE RETORNA LA LISTA NULA return(await Task.FromResult(lista)); } } //SE VERIFICA SI EL CODIGO DE ESTATUS DEL CONSUMO DEL SERVICIO WEB ES POSITIVO if (response.IsSuccessStatusCode) { //DE SER POSITIVO, SE DESERILIZA EL OBJETO JSON (List<>)CONTENIDO EN LA RESPUESTA RECIBIDA LUEGO DEL CONSUMO DEL SERVICIO WEB lista = JsonConvert.DeserializeObject <List <ResponseQueryAdmin> >(await response.Content.ReadAsStringAsync()); } else { //DE SER NEGATIVO, SE DESERIALIZA EL OBJETO JSON (STRING) errormessage = JsonConvert.DeserializeObject <string>(await response.Content.ReadAsStringAsync()); } //SE RETORNA LA LISTA DE USUARIOS ENCONTRADOS return(await Task.FromResult(lista)); }
//-------------------------------------------------------------------------------------------------- //FUNCION QUE RETORNARA UNA LISTA DE USUARIOS, LOS CUALES DEBEN CUMPLIR CON EL PARAMETRO DE BUSQUEDA //ENVIADO. EL LLAMADO SE HACE DESDE LA PAGINA "PaginaQueryAdmin" DE LA APLICACION "Mtto App". //EN ESTA FUNCION SE RECIBEN LOS PARAMETROS: // -request: OBJETO DEL TIPO "RequestQueryAdmin" EL CUAL CONTENDRA EL PARAMETRO ENVIADO Y EL NUMERO // DE OPCION DE BUSQUEDA (0 => Consulta por cedula; 1=> Consulta por Ficha; 2=> Consulta por Nombr(s) // 3=> Consulta por Apellido(s); 4=> Consulta por Username) //-------------------------------------------------------------------------------------------------- public async Task <ActionResult <List <QueryAdmin> > > QueryCedula([FromBody] RequestQueryAdmin request) { //CREACION E INICIALIZACION DE VARIABLES List <QueryAdmin> result = new List <QueryAdmin>(); //=> LISTA DE USUARIOS QUE COINCIDEN CON EL PARAMETRO ENVIADO //CREACION E INICIALIZACION DE LA LISTA DE USUARIOS REGISTRADOS EN LA PLATAFORMA List <Personas> registros = await this._context.Personas.ToListAsync(); //SE RECORRE CADA UNO DE LOS REGISTROS ("Personas") foreach (Personas x in registros) { //SE EVALUAN TODOS LOS REGISTROS MENOS EL REGISTRO DEL USUARIO ADMINISTRATOR if (x.Cedula != 0) //=> true => EL REGISTRO EVALUADO NO ES EL USUARIO ADMINISTRATOR { //SE EVALUA QUE EL DATO ENVIADO SE ENCUENTRE DENTRO DE LA LISTA REGISTROS. /*------------------------------------------------------------------------ * NOTA: LA EVALUACION SE HACE TOMANDO EN CUENTA EL TAMAÑO (CANTIDAD DE * CARACTERES) DEL PARAMETRO ENVIADO. PUESTO QUE SE CONSIDERA QUE NO SIEMPRE * SE ENVIARA TODO EL NUMERO DE CEDULA COMPLETO SE HACE UNA BUSQUEDA DE LOS * REGISTROS EXISTENTES ENVIANDO EL NUMERO DE CEDULA COMPLETO O PARCIAL * (TODO DEPENDE DE COMO SEA ENVIADO EL PARAMETRO) Y SE RETORNARAN EL * REGISTRO O LOS REGISTROS QUE COINCIDAN * ------------------------------------------------------------------------*/ if (request.Parametro.ToString() == x.Cedula.ToString().Substring(0, request.Parametro.ToString().Length)) { //SE AGREGA A LA LISTA EL REGISTRO DE DICHA PERSONA result?.Add(QueryAdmin.NewQueryAdmin(x)); } } } //SE EVALUA CUANTOS ELEMENTOS HAY EN LA LISTA "result" if (result.Count == 0) { //CERO ELEMTENTOS: SE RETORNA EL CORIGO DE ESTATUS 404 NOTFOUND (NO HAY REGISTROS QUE CUMPLAN CON EL PARAMETRO ENVIADO) return(NotFound(NotFoundMessage)); } else { //SE INICIA EL CICLO TRY...CATCH try { //DIFERENTE DE CERO: SE RETORNA EL CODIGO DE ESTATUS 200 OK JUNTO CON LA LISTA DE USUARIOS OBTENIDOS using (var transaction = this._context.Database.BeginTransaction()) { //-------------------------------------------------------------------------------------------------------- //SE CREA E INICIALIZA UN OBJETO DEL TIPO "HistorialSolicitudesWeb" CON LA INFORMACION DEL NUEVO REGISTRO //DE LA TABLA "HistorialSolicitudesWeb". Historialsolicitudesweb solicitudesweb = Historialsolicitudesweb.NewHistorialSolocitudesWeb(request.UserId, 6); //-------------------------------------------------------------------------------------------------------- //SE ALMACENA EL REGISTRO DENTRO DE LA BASE DE DATOS this._context.Historialsolicitudesweb.Add(solicitudesweb); //=> SE CREA LA INFORMACION DE UN NUEVO REGISTRO EN LA TABLA HistorialSolicitudesWeb. this._context.Entry(solicitudesweb).State = EntityState.Added; //=> SE CAMBIA EL ESTADO DEL OBJETO CREADO COMO REFERENCIA. //-------------------------------------------------------------------------------------------------------- //SE GUARDAN LOS CAMBIOS REALIZADOS SOBRE LA BASE DE DATOS await this._context.SaveChangesAsync(); //SE CULMINA LA TRANSACCION CON LA BASE DE DATOS await transaction.CommitAsync(); } //SE RETORNA EL CODIGO 200 OK JUNTO CON LA LISTA DE USUARIOS QUE COINCIDEN return(Ok(result)); } //SI OCURRE ALGUNA EXCEPCION EN EL PROCESO DE LECTURA Y ESCRITURA DE LA BASE DE DATOS EL CODIGO //SE REDIRIGE A LA SECCION CATCH DEL CICLO TRY...CATCH catch (Exception ex) when(ex is DbUpdateException || ex is DbUpdateConcurrencyException) { Console.WriteLine("\n================================================="); Console.WriteLine("================================================="); Console.WriteLine("\nHa ocurrico un error:\n" + ex.Message.ToString()); Console.WriteLine("================================================="); Console.WriteLine("=================================================\n"); //SE RETONA LA RESPUESTA "BadRequest" JUNTO CON UN MENSAJE INFORMANDO SOBRE EL ERROR return(BadRequest("\nHa ocurrico un error, intentelo nuevamente")); } } }