Hola a todos:
Yo con esto del Http y los streams de datos me lío un montón. Son cosas que he ido aprendiendo sobre la marcha y no tengo una base sólida. Resulta que estoy mandando datos a una WebApi, para ello creo un HttpContent tal que así:
Código:
HttpContent content = new StringContent(JsonConvert.SerializeObject(miObject), System.Text.Encoding.UTF8, "application/json");
Luego uso ese HttpContent para llamar a un método que envía los datos con un PostAsync:
Código:
HttpClient client = (un chorizo);
HttpResponseMessage response = await client.PostAsync(requestUri, content);
El problema que tengo es que, a veces, ha pasado tanto tiempo desde el último mensaje que la WebApi ha cerrado la sesión, y no me entero hasta que me llega la respuesta con el código 401 o 403. Vale, no pasa nada: se envían los datos de login, y cuando se abra la sesión, repito el envío ¿no?
Pues no, el PostAsync, tras el envío, borra (dispose) el contenido del HttpContent, y esto me provoca una excepción que estoy tratando de solucionar.
Como el PostAsync está en un método que se usa en todo el código, no puedo cambiar el parámetro de entrada de HttpContent a object, porque tendría como 40 llamadas que modificar. Así que he pensado que es mejor crear un clon del HttpClient, y enviar este en su lugar. De esta forma, si falla el envío, puedo crear una nueva copia y volver a enviar la información.
El problema es que HttpClient no tiene función Clone(). Se supone que debería deserializar el contenido, o convertirlo en un Stream, o en un byte array o en algo, y usar eso para generar un nuevo HttpContent... y eso es lo que no sé cómo hacer. Puedo crear un StreamArray, pero luego no hay forma de meterlo en el HttpContent, o un byte array, o un string... y no sé si se puede deserializar de nuevo en el objeto original para volver a serializarlo en un JSON, o si esa idea requiere dos conversiones que no son necesarias porque hay una forma más sencilla de hacerlo.
Llevo muchas páginas de ayuda leídas y ninguna me resuelve la duda. A ver si alguien entre vosotros me puede echar una mano, por favor.
Marcadores