Reutilizar la conexión con HttpWebRequest en C #

Necesito hacer una solicitud POST usando .Net.

Puedo autenticarme mediante GET, por lo que estoy intentando realizar una solicitud POST en la misma conexión para mantener mi autenticación.

El problema es que obtengo una excepción 401 No autenticada, lo que implica que la conexión no se ha reutilizado.

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("my-server"); request.Credentials = new NetworkCredential("user", "password"); request.GetResponse().Close(); // Works fine // Now the request I want to make... request = (HttpWebRequest)WebRequest.Create("my-server"); request.Credentials = new NetworkCredential("user", "password"); request.Method = "post"; string postData = "param1=1&param2=2"; byte[] data = new ASCIIEncoding().GetBytes(postData); request.ContentLength = data.Length; request.ContentType = "application/x-www-form-urlencoded"; using (Stream stream = request.GetRequestStream()) { stream.Write(data, 0, data.Length); stream.Close(); request.GetResponse().Close(); // This line gets a 401 Not Authorized error. } 

EDITAR: ha habido algunas sugerencias que necesito para transferir cookies. Lo siguiente tampoco funciona:

 HttpWebRequest request = (HttpWebRequest)WebRequest.Create("my-server"); request.Credentials = new NetworkCredential("user", "password"); var response = (HttpWebResponse)request.GetResponse(); var cookieContainer = new CookieContainer(); foreach (Cookie cookie in response.Cookies) { cookieContainer.Add(cookie); } response.Close(); // Now the request I want to make... request = (HttpWebRequest)WebRequest.Create("my-server"); request.Credentials = new NetworkCredential("user", "password"); request.CookieContainer = cookieContainer; request.Method = "post"; string postData = "param1=1&param2=2"; byte[] data = new ASCIIEncoding().GetBytes(postData); request.ContentLength = data.Length; request.ContentType = "application/x-www-form-urlencoded"; using (Stream stream = request.GetRequestStream()) { stream.Write(data, 0, data.Length); request.GetResponse().Close(); // This line gets a 401 Not Authorized error. } 

La razón por la que no permanece conectado es porque no le da a HttpWebRequest un CookieContainer para mantener el ID de sesión.

Consulte lo siguiente en Preguntas y respuestas sobre StackOverflow para su posible solución:

C # mantener ID de sesión en httpwebrequest

Solicitud web múltiple en la misma sesión

Espero que esto haya ayudado.

¿Alguna idea de cómo se gestiona la autenticación en el otro extremo? ES DECIR. Si configura una cookie, entonces debe asegurarse de que cuenta para eso, vea esta página y específicamente esta nota:

Nota

Por razones de seguridad, las cookies están deshabilitadas por defecto. Si desea usar cookies, use la propiedad CookieContainer para habilitar las cookies.