//Para que un metodo sea asincrono hay que marcarlo como Task y async //Para esperar y poder utilizar lo que devuelve una llamada asincrona //se usa await public async Task Update(TModelo model) { var datos = Serializacion <TModelo> .Serializar(model); //No se usa webrequest porque puede/suele fallar en los metodos post/put/delete //Se usa el httppclienthandler en su lugar. using (var handler = new HttpClientHandler()) { if (auth) { handler.Credentials = new NetworkCredential(user, pass); } //Crea un client pasandole la información del handler(que tiene los datos de autenticacion) using (var client = new HttpClient(handler)) { //stringcontent manipula una cadena de texto plano para que la pueda interpretar //una cabecera http var contenido = new StringContent(datos); //indicas en la cabecera el tipo de contenido que tiene. contenido.Headers.ContentType = new MediaTypeHeaderValue("application/json"); //le indicas q espere(await) para que no se cierre la conexión del using //mientras está haciendo el put var respuesta = await client.PutAsync(new Uri(url), contenido); if (!respuesta.IsSuccessStatusCode) { throw new Exception("Error al modificar"); } } } }
public List <TModelo> Get(String paramUrl = null) { List <TModelo> lista; var urlDest = url; if (paramUrl != null) { urlDest += paramUrl; } //webrequest siempre es con método GET. var request = WebRequest.Create(urlDest); if (auth) { request.Credentials = new NetworkCredential(user, pass); } request.Method = "GET"; var response = request.GetResponse(); //stream es el canal de comunicacion/flujo de datos que se abre entre aplicaciones //que dentro lleva ya la respuesta. De base la información viaja como bytes using (var stream = response.GetResponseStream()) { //reader permite leer datos del stream. //Streamreader transforma él solo de bytes a texto using (var reader = new StreamReader(stream)) { var serializado = reader.ReadToEnd(); //transforma el texto en una lista de objetos para trabajar con ella. lista = Serializacion <List <TModelo> > .Deserializar(serializado); } } return(lista); }