2011-07-02 30 views
5

Próbowałem uzyskać dostęp do interfejsu API opartego na REST na telefonie z systemem Windows Phone przy użyciu kilku różnych podejść, ale wydaje mi się, że mam problemy z załączaniem plików cookie do żądania z wszystkimi z nich. Próbowałem podejście WebClient (który teraz wydaje się być oznaczony SecurityCritical, więc nie można już dziedziczyć z niego i dodać kod). Spojrzałem krótko na HttpWebRequest, co wydawało się w najlepszym wypadku uciążliwe.Nie można wysyłać plików cookie za pomocą programu RestSharp

Teraz używam RestSharp, który wydaje się przyzwoity w użyciu, ale nadal mam problemy z tym, że moje pliki cookie nie są dodawane do żądania, gdy są wysyłane.

Mój kod wygląda następująco:

// ... some additional support vars ... 
private RestClient client; 

public ClassName() { 
    client = new RestClient(); 
    client.BaseUrl = this.baseAddress.Scheme + "://" + baseAddress.DnsSafeHost; 
} 

public void GetAlbumList() 
{ 
    Debug.WriteLine("Init GetAlbumList()"); 

    if (this.previousAuthToken == null || this.previousAuthToken.Length == 0) 
    { 
     throw new MissingAuthTokenException(); 
    } 

    RestRequest request = new RestRequest(this.baseUrl, Method.GET); 

    // Debug prints the correct key and value, but it doesnt seem to be included 
    // when I run the request 
    Debug.WriteLine("Adding cookie [" + this.gallerySessionIdKey + "] = [" + this.sessionId + "]"); 
    request.AddParameter(this.gallerySessionIdKey, this.sessionId, ParameterType.Cookie); 

    request.AddParameter("g2_controller", "remote:GalleryRemote", ParameterType.GetOrPost); 
    request.AddParameter("g2_form[cmd]", "fetch-albums-prune", ParameterType.GetOrPost); 
    request.AddParameter("g2_form[protocol_version]", "2.2", ParameterType.GetOrPost); 
    request.AddParameter("g2_authToken", this.previousAuthToken, ParameterType.GetOrPost); 

    // Tried adding a no-cache header in case there was some funky caching going on 
    request.AddHeader("cache-control", "no-cache"); 

    client.ExecuteAsync(request, (response) => 
    { 
     parseResponse(response); 
    }); 
} 

Jeśli ktoś ma jakieś wskazówki co do tego, dlaczego pliki cookie nie są wysyłane do serwera, proszę dać mi znać :) Używam RestSharp 101,3 i .Net 4.

+0

W jaki sposób określasz, że pliki cookie nie są dostępne na żądanie? –

+0

Obaj używaliśmy Fiddlera jako proxy dla emulatora i, aby upewnić się, próbowałem wskazać go w pliku PHP, który właśnie wydrukował $ _COOKIE. – NiteLite

+1

Mam zamiar zostawić ten link tutaj dla dobrobytu, na wypadek, gdyby ktoś inny miał ten sam problem. Wydaje się, że problem dotyczy kodu RestSharp: http://groups.google.com/group/restsharp/browse_thread/thread/d93f73e9e300ba43 – NiteLite

Odpowiedz

-1

HttpWebRequest jest najlepszy w użyciu. Po prostu użyj CookieContainer do pracy z plikami cookie. Ale trzeba zachować odniesienie swojego CookieContainer nad wszystkimi prośby, aby dostać tę pracę

CookieContainer cc = new CookieContainer(); 
HttpWebRequest webRequest = HttpWebRequest.CreateHttp(uri); 
webRequest.CookieContainer = cc; 
webRequest.BeginGetResponse((callback)=>{//Code on callback},webRequest); 

cc musi być uwzględniona w instancji do ponownego wykorzystania na inny wniosek.

4

RestSharp 102.4 prawdopodobnie naprawił ten problem.

request.AddParameter(_cookie_name, _cookie_value, ParameterType.Cookie); 

lub, w przypadku

request.AddParameter(this.gallerySessionIdKey, this.sessionId, ParameterType.Cookie); 

będzie działać dobrze.

Powiązane problemy