HttpWebRequest y HttpWebResponse: mantener el estado de la solicitud de inicio de sesión para consultas consecutivas

Tengo algunos HttpWebRequests y HttpWebResponses encadenados, también utilizando CookieContainer.

El código simula que un usuario recorre tres páginas “Acepto” diferentes que configuran la información de la cookie, iniciando sesión con un nombre de usuario y contraseña en una cuarta y realizando una POST (búsqueda) en la quinta parte, devolviendo la respuesta como una cadena.

¿Hay alguna manera de mantener el objeto HttpWebRequest como ‘conectado’ para evitar seguir esos pasos cada vez que un usuario realiza una búsqueda?

¿Puedo configurarlo como estático, y si es nula o carece de información de cookies, puede ejecutar todos los pasos? ¿Cuál es un buen patrón para esto?

Si el servidor en el que está iniciando sesión utiliza autenticación basada en cookies, debe crear un System.Net.CookieContainer donde almacena la cookie de autenticación. Esto es bastante simple:

CookieContainer container = new CookieContainer(); // Create web request request.CookieContainer = container; // Create next web request nextRequest.CookieContainer = container; // And so on ... 

Simplemente reutilice el objeto CookieContainer para todos sus objetos HttpWebRequest y guárdelo en la memoria para usarlo más adelante.

El CookieContainer es serializable, por lo que puede guardarlo en el disco si lo necesita. Eso le permitirá conservar sus cookies incluso cuando su usuario reinicie su aplicación.

Alternativamente, si la página no utiliza cookies pero almacena el identificador de sesión en la url, debe pasar el identificador de la sesión en el url de las páginas que desea. Solo agréguelo a la url y debería funcionar. 🙂