2010-12-22 14 views
5

Estoy tratando de hacer algunas cosas simples, ya he visto los ejemplos a través de la web y no estoy seguro de lo que estoy haciendo mal Es una prueba de unidad que ' Estoy haciendo una prueba de funcionalidad que luego será ejecutada por diferentes dispositivos.
Básicamente estoy creando una webrequest en mi sitio, que devuelve un conjunto de cookies, que más adelante necesitamos
Luego quiero crear una nueva webrequest , el uso de las galletas de volver de la primera respuesta, pero cuando estoy leyendo esa información, las galletas están vacías
HttpWebRequest Cookies no configuradas

var request = (HttpWebRequest)WebRequest.Create("http://localhost/bla"); 
request.ContentType = "application/x-www-form-urlencoded"; 
request.Method = "GET"; 

request.CookieContainer = new CookieContainer(); 
request.CookieContainer.Add(originalResponse.Cookies); // originalResponse.Cookies has several cookies needed by "bla" 
var response = request.GetResponse(); 

en Ano Ther lugar ... (dentro de "bla")

HttpContext.Current.Request.Cookies // this is empty 

Respuesta

11

Ok, encontré lo que estaba pasando El problema es que no podemos simplemente configurar el cookiecontainer para tener las cookies de la respuesta, ya que es una nueva solicitud que necesitamos para establecer el dominio al que pertenecen las cookies (. red no está asumiendo que el dominio es el de la URI de la solicitud objeto)

así, tenemos que hacer algo como esto al establecer las galletas:

request.CookieContainer = new CookieContainer(); 
request.CookieContainer.Add(new Uri("http://localhost"), originalResponse.Cookies); 

así como otra nota, estaba teniendo un problema de ruta al configurar las cookies .. obteniendo un error como "La 'ruta' =/parte de MyApp la cookie no es válida ". Lo solucioné estableciendo el camino de las cookies a nada antes de agregarlas (y hacerlas válidas en todo el dominio)

for (int i = 0; i < originalResponse.Cookies.Count; i++) 
    { 
     originalResponse.Cookies[i].Path = String.Empty; 
    } 
+0

Si esto resolvió el problema, márquelo como resuelto para que otros puedan encontrarlo más fácil y para que no aparezca como sin respuesta :) –

+0

¿cómo puedo marcarlo como resuelto? Traté de aceptar mi propia respuesta pero dice que debo esperar 2 días –

1

¿Usted ha intentado mirar las cabeceras de petición tratado directamente o incluso utilizando herramientas de inspección de HTTP?

¿Está originalResponse.Cookies poblado con datos? ¿El dominio es el mismo para la colección y la solicitud saliente?

+0

Estoy tratando de usar el violín ahora mismo para ver qué está pasando. sin embargo, por alguna razón, el violinista no captura la solicitud (porque va directamente a iis). tratando de resolver eso :) el dominio es el mismo, el originalResponse.Cookies está lleno (está en el comentario del código) –

+1

ok, las cookies NO se están estableciendo en la solicitud. sin embargo, la variable CookieContainer TIENE las cookies. ¿algunas ideas? –

+0

violín probablemente no puede interceptar porque tiene que actuar como un proxy y no hay configuración de proxy involucrada. ¿Está diciendo que su nueva solicitud de salida no tiene datos de cookies adjuntos? Hmmm ... – annakata

Cuestiones relacionadas