2010-12-22 18 views
5

Ich versuche ein paar einfache Dinge zu tun, ich habe mir die Beispiele bereits im Internet angeschaut und bin mir nicht sicher, was ich falsch mache Es ist ein Komponententest, dass ich Ich tue, um einige Funktionen zu testen, die später von verschiedenen Geräten ausgeführt werden.
Grundsätzlich erstelle ich eine Webanfrage an meine Seite, die eine Reihe von Cookies zurückgibt, die wir später benötigen Dann möchte ich eine neue Webanfrage erstellen , die zurück Cookies von der ersten Reaktion verwendet wird, aber wenn ich diese Informationen gerade lese, sind die Cookies leer
HttpWebRequest Cookies werden nicht gesetzt

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(); 

In ano ther Ort ... (innen „bla“)

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

Antwort

11

Ok, gefunden, was passierte Das Problem ist, dass wir den Cookiecontainer nicht einfach auf die Cookies der Antwort setzen können, da es eine neue Anfrage ist, müssen wir auch die Domäne festlegen, zu der die Cookies gehören. net unter der Annahme nicht, dass die Domäne der eine von der URI im Request-Objekt ist)

so brauchen wir so etwas tun, wenn die Cookies setzen:

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

Genau wie andere Note, i hatte ein Pfadproblem beim Setzen der Cookies .. einen Fehler bekommen wie "Der 'Pfad' =/MyApp Teil von das Cookie ist ungültig ". Ich löste das, indem ich den Pfad der Cookies auf nichts einstellte, bevor ich sie hinzufügte (und sie in der gesamten Domäne gültig machte)

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

Wenn dies das Problem gelöst hat, markieren Sie es als gelöst, so dass andere es leichter finden können und damit es nicht als unbeantwortet angezeigt wird :) –

+0

Wie kann ich es als gelöst markieren? Ich habe versucht, meine eigene Antwort zu akzeptieren, aber es heißt, dass ich 2 Tage warten muss –

1

Haben Sie an den Request-Header direkt versucht, Blick oder sogar versucht, über HTTP Prüfwerkzeuge?

Ist originalResponse.Cookies mit Daten gefüllt? Ist die Domain für die Sammlung und die ausgehende Anfrage gleich?

+0

ich versuche jetzt, fiddler zu verwenden, um zu sehen, was passiert. Aus irgendeinem Grund erfasst Fiddler die Anfrage jedoch nicht (weil sie direkt zu iis geht). versuchen, das zu lösen :) die Domain ist das gleiche, die originalResponse.Cookies ist bestückt (es ist in der Code-Kommentar) –

+1

ok, die Cookies sind nicht in der Anfrage festgelegt. Die CookieContainer-Variable enthält jedoch die Cookies. irgendwelche Ideen? –

+0

Fiddler kann wahrscheinlich nicht abgefangen werden, da es als Proxy fungieren muss und keine Proxy-Konfiguration erforderlich ist - sagen Sie, dass Ihre neue ausgehende Anfrage keine Cookie-Daten angehängt hat? Hmmm ... – annakata

Verwandte Themen