Невозможно отправить куки с RestSharp - PullRequest
7 голосов
/ 02 июля 2011

Я пытался получить доступ к API на основе REST в Windows Phone, используя несколько разных подходов, но, похоже, у меня возникают проблемы с прикреплением файлов cookie к запросу со всеми из них. Я попробовал подход WebClient (который теперь, кажется, стал помеченным SecurityCritical, так что вы больше не можете наследовать от него и добавлять код). Я кратко посмотрел на HttpWebRequest, который в лучшем случае казался громоздким.

Сейчас я использую RestSharp, который кажется неплохим, но у меня все еще есть проблемы с тем, что мои куки не добавляются в запрос при его отправке.

Мой код выглядит следующим образом:

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

Если у кого-нибудь есть какие-либо советы относительно того, почему файлы cookie не отправляются на сервер, сообщите мне об этом :) Я использую RestSharp 101.3 и .Net 4.

Ответы [ 2 ]

6 голосов
/ 01 декабря 2011

RestSharp 102.4, похоже, исправил эту проблему.

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

или, в вашем случае

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

будет работать нормально.

0 голосов
/ 10 ноября 2011

HttpWebRequest является лучшим в использовании.Просто используйте CookieContainer для работы с куки.Но вы должны хранить ссылку на ваш CookieContainer на все ваши запросы, чтобы получить эту работу.

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

Копия должна быть указана в вашем экземпляре для повторного использования по другому запросу.

...