2015-06-07 7 views
6

Ich versuche, eine Autorisierung auf einer kyrillischen Domain mit dem WebClient durchzuführen. Die Autorisierung durchläuft wenige Stufen mit Weiterleitungen zwischen normalen und Punicode-Domänen. Das Problem ist, dass HttpWebRequest keine Cookies im zugewiesenen CookieContainer speichern kann, wenn es von der Punycode-Domain gesetzt wurde. Zum Beispiel wird dieser Code CookieException auslösen.CookieContainer speichert keine Cookies für internationalisierte Domain-Namen

var cookie = new Cookie("test_cookie", "test_value", "/", ".xn----7sbcca6bi0ak9b0a6f.xn--p1ai"); 
var container = new CookieContainer().Add(cookie); 

Das Problem wird durch die Tatsache verschärft, dass die Antwort Cookie Umleitungen auf eine andere Seite, das heißt nach WebClient.UploadValues ​​(...) in WebClient.ResponseHeaders gibt es keine Cookie-Informationen setzt ausgeführt wurden.

ist unter dem normalen Genehmigungsverfahren (mit Browser)

Method Result Received Type  URL              RedirectURL            Set-Cookie                                 
POST 302  1,18 K text/html http://xn----7sbcca6bi0ak9b0a6f.xn--p1ai/admin/login  http://xn----7sbcca6bi0ak9b0a6f.xn--p1ai/admin    sess_id=.......; expires=Mon, 06-Jun-2016 07:20:57 GMT; Max-Age=31536000; path=/; domain=.xn----7sbcca6bi0ak9b0a6f.xn--p1ai; httponly  
GET  302  722  text/html http://xn----7sbcca6bi0ak9b0a6f.xn--p1ai/admin    /admin/orders                                               
GET  200  200,00 K text/html http://xn----7sbcca6bi0ak9b0a6f.xn--p1ai/admin/orders                                                    

Gibt es eine Abhilfe?

+0

Kann jemand bestätigen, dass es ein Fehler ist? Vielleicht sollte ich es auf https://connect.microsoft.com/VisualStudio/ melden? – Leff

+0

Update: 1. IDN und IRI Verarbeitung muss in der Konfiguration aktiviert werden, um das oben beschriebene Verhalten zu reproduzieren. 2. Offensichtlich ist die interne Methode 'VerifySetDefaults' der Klasse' System.Net.Cookie' der Grund des Problems. Ich versuche herauszufinden, warum, aber "VerifySetDefaults" ist ziemlich kompliziert für mich. – Leff

+0

Update: Es scheint, dass 'VerifySetDefaults' versucht, ein IDN mit seiner Punycode-Darstellung zu vergleichen, wenn es fehlschlägt, wird die Ausnahme ausgelöst. – Leff

Antwort

1

Sind Sie sicher, dass die IDN das Problem ist?

Der folgende Codeausschnitt (die die gleiche wie bei Ihnen ist, aber mit der zweiten Zeile aufzuteilen, um es zu kompilieren zu machen)

var cookie = new Cookie("test_cookie", "test_value", "/", ".xn----7sbcca6bi0ak9b0a6f.xn--p1ai"); 
var container = new CookieContainer(); 
container.Add(cookie); 

container.GetCookies(new Uri("http://test.xn----7sbcca6bi0ak9b0a6f.xn--p1ai")).Dump(); 

kein Cookieüberhaupt werfen (von LINQPad laufen). Könnte das Problem vielleicht in dem Namen und/oder Wert liegen, den Sie für den Cookie festlegen möchten? Was ist die genaue Nachricht, die Sie von der CookieException erhalten?

+0

Es ist definitiv IDN Problem, weil normale Domain-Cookies gut gespeichert sind. Ihr Code-Snippet löst eine Ausnahme für .net fw 4.5.1 aus. Welche Version hast du getestet? – Leff

+0

! [Screenshot] (http://s017.radikal.ru/i433/1506/2f/7c13166ab19f.png) – Leff

+0

läuft 4.0.30319.34014, das ist .NET 4.5.1 unter Windows 8.1 64-Bit. –

Verwandte Themen