Frage

Ich mag Tunnel durch eine HTTP-Anforderung von meinem Server zu einem Remote-Server, alle Cookies, die durch. So erstelle ich ein neues HttpWebRequest Objekt und will Cookies setzen darauf.

HttpWebRequest.CookieContainer ist Typ System.Net.CookieContainer die System.Net.Cookies hält.

Auf meinem eingehenden Request-Objekt:

HttpRequest.Cookies ist Typ System.Web.HttpCookieCollection die System.Web.HttpCookies hält.

Grundsätzlich möchte ich in der Lage sein, sie zu einander zuzuordnen, aber die unterschiedlichen Typen macht es unmöglich. Muss ich sie konvertieren, indem ihre Werte zu kopieren, oder gibt es einen besseren Weg?

War es hilfreich?

Lösung

Hier ist der Code, den ich verwendet habe, die Cookie-Objekte aus der eingehenden Anfrage an die neue HttpWebRequest ... ( „MyRequest“ ist der Name meines HttpWebRequest-Objekt.) Übertragen

HttpCookieCollection oCookies = Request.Cookies;
for ( int j = 0; j < oCookies.Count; j++ ) 
{
    HttpCookie oCookie = oCookies.Get( j );
    Cookie oC = new Cookie();

    // Convert between the System.Net.Cookie to a System.Web.HttpCookie...
    oC.Domain   = myRequest.RequestUri.Host;
    oC.Expires  = oCookie.Expires;
    oC.Name     = oCookie.Name;
    oC.Path     = oCookie.Path;
    oC.Secure   = oCookie.Secure;
    oC.Value    = oCookie.Value;

    myRequest.CookieContainer.Add( oC );
}

Andere Tipps

hatte ich eine Notwendigkeit, dies heute für eine Sharepoint-Website zu tun, die formularbasierte Authentifizierung (FBA) verwendet. Wenn Sie versuchen, eine Anwendung Seite aufrufen, ohne die Cookies Klonen und die Zuweisung ein Cookie Objekt dann wird die Anforderung fehlschlagen.

Ich entschied mich zu abstrahieren den Job zu dieser praktischen Erweiterung Methode:

public static CookieContainer GetCookieContainer(this System.Web.HttpRequest SourceHttpRequest, System.Net.HttpWebRequest TargetHttpWebRequest)
    {
        System.Web.HttpCookieCollection sourceCookies = SourceHttpRequest.Cookies;
        if (sourceCookies.Count == 0)
            return null;
        else
        {
            CookieContainer cookieContainer = new CookieContainer();
            for (int i = 0; i < sourceCookies.Count; i++)                
            {
                System.Web.HttpCookie cSource = sourceCookies[i];
                Cookie cookieTarget = new Cookie() { Domain = TargetHttpWebRequest.RequestUri.Host, 
                                                     Name = cSource.Name, 
                                                     Path = cSource.Path, 
                                                     Secure = cSource.Secure, 
                                                     Value = cSource.Value };
                cookieContainer.Add(cookieTarget);
            }
            return cookieContainer;
        }
    }

Sie können dann rufen Sie einfach es von jedem Httprequest-Objekt mit einem Ziel HttpWebRequest-Objekt als Parameter, zum Beispiel:

HttpWebRequest request;                
request = (HttpWebRequest)WebRequest.Create(TargetUrl);
request.Method = "GET";
request.Credentials = CredentialCache.DefaultCredentials;
request.CookieContainer = SourceRequest.GetCookieContainer(request);                
request.BeginGetResponse(null, null);

wo TargetURL ist die URL der Seite, die ich bin nach und SourceRequest ist die Httprequest der Seite, die ich auf zur Zeit bin, über Page.Request abgerufen werden.

Der von David vorgeschlagen ist die richtige. Sie müssen kopieren. Einfach nur Funktion erstellen wiederholt zu kopieren. Http und Cookie-Objekt wird erstellt, um sicherzustellen, dass wir sowohl in ihrer Funktionalität unterscheiden können und wo sie kommen. Http zwischen Benutzer und Ihre Proxy verwendet Cookies zwischen Ihrem Proxy und Remote-Web-Server verwendet wird.

Http hat weniger Funktionen, da das Cookie von Ihnen entstanden ist und Sie wissen, wie es zu handhaben. Cookie Sie Cookies von Web-Server empfangen zu verwalten. Wie Cookie, kann es verwendet werden, Domain, Pfad und Ablauf zu verwalten.

So Benutzerseite und Web-Server-Seite unterschiedlich ist und es zu verbinden, sicher, Sie brauchen es zu konvertieren. In Ihrem Fall ist es einfach nur eine direkte Zuordnung.

Beachten Sie, dass Cookie hat einen Bug auf .Add (Cookie) und .GetCookies (uri) -Methode.

, um die Details sehen und beheben hier:

http: // dot -net-expertise.blogspot.com/2009/10/cookiecontainer-domain-handling-bug-fix.html

CallMeLaNN

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top