2012-10-23 14 views
10

umleiten, wenn Sie den Login-Prozess Anmeldung Firebug ich sehe, dass es wie dieses istWebClient nicht automatisch

POST //The normal post request 
GET //Automatically made after the login 
GET //Automatically made after the login 
GET //Automatically made after the login 

Wenn eine Post-Anforderung mit meinen Code machen darunter nicht die automatischen GET-Anfragen gemacht hat, dass der Browser ist tun.

MY WebClient Handler

using System; 
using System.Net; 

namespace Test 
{ 
    class HttpHandler : WebClient 
    { 
     private CookieContainer _mContainer = new CookieContainer(); 

     protected override WebRequest GetWebRequest(Uri address) 
     { 
      var request = base.GetWebRequest(address); 
      if (request is HttpWebRequest) 
      { 
       (request as HttpWebRequest).CookieContainer = _mContainer; 
      } 
      return request; 
     } 

     protected override WebResponse GetWebResponse(WebRequest request) 
     { 
      var response = base.GetWebResponse(request); 
      if (response is HttpWebResponse) 
       _mContainer.Add((response as HttpWebResponse).Cookies); 
      return response; 
     } 

     public void ClearCookies() 
     { 
      _mContainer = new CookieContainer(); 
     } 
    } 
} 

Verwenden von Code

private static async Task<byte[]> LoginAsync(string username, string password) 
{ 
    var postData = new NameValueCollection(); 
    var uri = new Uri(string.Format("http://{0}/", ServerName)); 

    postData.Add("name", username); 
    postData.Add("password", password); 

    return await HttpHandler.UploadValuesTaskAsync(uri, postData); 
} 

Beim Versuch, die Verbindung meiner Anwendung zu verfolgen ist es nur die POST-Anforderung zu tun und nicht der Rest von GET-Anfragen. [DAS WIRD AUTOMATISCH IM BROWSER GEMACHT]

+0

Scheitert es auch in der synchronen Version? Mit AllowAutoRedirect würde ich erwarten, dass es funktioniert ... möglicherweise ist es ein Problem mit der Umleitung von POST? –

Antwort

1

Das sollte nicht überraschend sein, da HttpWebRequest kein Browser ist. Wenn Sie diese Weiterleitungen durchführen müssen, überprüfen Sie die HttpWebResponse.StatusCode, und eine weitere Anfrage, wenn es eine redirect code in the 300's ist. Hinweis aus dem Link unter 10.3 Umleitung 3xx:

Diese Klasse des Statuscodes zeigt an, dass der Benutzeragent weitere Maßnahmen ergreifen muss, um die Anforderung zu erfüllen. Die erforderliche Aktion KANN vom Benutzeragenten ohne Interaktion mit dem Benutzer ausgeführt werden, wenn und nur wenn die Methode, die in der zweiten Anforderung verwendet wird, GET oder HEAD ist. Ein Client sollte unendliche Umleitungsschleifen erkennen, da solche Schleifen Netzwerkverkehr für jede Umleitung erzeugen.

+8

Gegeben HttpWebRequest.AllowAutoRedirect, ich würde * erwarten * es funktioniert ... –

+1

Der Webclient hat AllowAutoRedirect automatisch true –

+0

@dbaseman Ich frage nach WebClient nicht die abgeleitete HttpWebResponse & Request –

7

Try

request.AllowAutoRedirect = true; 

direkt unter dem Es löste ein ähnliches Problem für mich, auch das autoredirect soll

var request = base.GetWebRequest(address); 

Hinzufügen von Standard-ON sein.