2011-07-02 29 views
5

Tôi đã cố gắng truy cập API dựa trên REST trên Windows Phone bằng một số cách tiếp cận khác nhau, nhưng dường như tôi đang gặp sự cố với việc đính kèm cookie vào yêu cầu với tất cả chúng. Tôi đã thử cách tiếp cận WebClient (mà bây giờ dường như đã trở thành đánh dấu SecurityCritical, vì vậy bạn không còn có thể kế thừa từ nó và thêm mã). Tôi nhìn một thời gian ngắn tại HttpWebRequest mà dường như cồng kềnh lúc tốt nhất.Không thể gửi cookie bằng RestSharp

Bây giờ tôi đang sử dụng RestSharp mà có vẻ tốt để sử dụng, nhưng tôi vẫn gặp vấn đề với cookie của tôi không được thêm vào yêu cầu khi nó được gửi.

Mã của tôi là như sau:

// ... 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); 
    }); 
} 

Nếu ai có bất cứ lời khuyên là tại sao các tập tin cookie không được gửi đến máy chủ, xin vui lòng cho tôi biết :) Tôi đang sử dụng RestSharp 101,3 và Net 4.

+0

Bạn xác định rằng cookie không theo yêu cầu như thế nào? –

+0

Tôi có cả hai đang chạy Fiddler như một proxy cho trình mô phỏng và, để đảm bảo, tôi đã thử trỏ nó vào một tệp PHP vừa mới in $ _COOKIE. – NiteLite

+1

Tôi sẽ để lại liên kết này ở đây cho sự thịnh vượng, trong trường hợp bất cứ ai khác có cùng một vấn đề. Dường như có vấn đề với mã RestSharp: http://groups.google.com/group/restsharp/browse_thread/thread/d93f73e9e300ba43 – NiteLite

Trả lời

-1

HttpWebRequest là cách tốt nhất để sử dụng. Đơn giản chỉ cần sử dụng CookieContainer để làm việc với cookie. Nhưng bạn phải giữ một tài liệu tham khảo của CookieContainer qua tất cả các yêu cầu của bạn để có được công việc này

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

cc phải được tham chiếu trong trường hợp của bạn được được tái sử dụng theo yêu cầu khác.

4

RestSharp 102.4 dường như đã khắc phục sự cố này.

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

hoặc, trong trường hợp của bạn

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

sẽ hoạt động tốt.

Các vấn đề liên quan