понедельник, 28 ноября 2011 г.

Cookie для WebClient из Windows Phone 7

Очень часто возникает вопрос, как программно зайти на какой-либо веб-страницу и вернуть ее в виде тектстовой строки в WP7. Идеальным решением для этого подойдет использование WebClient, который вернет данные в виде простой текстовой строки, которую можно будет легко проанализировать, например с помощью LINQ.

Один из вопросов, который возникает при использовании WebClient - это отсутствие поддержки cookie. Поэтому придется управлять состоянием сеанса вручную, если вы хотите использовать что-то вроде WebClient. Нужно будет убедиться, что cookie из HttpRequest ловятся, а затем сохраняются где-нибудь. Потом их можно передать его в WebClient запрос. Вроде бы все просто.

 Чтобы решить эту проблему, сделаем свои собственные cookie для WebClient:

public class MyCookieWebClient: WebClient
{
      [System.Security.SecuritySafeCritical]
      public MyCookieWebClient()
            : base()
     {
     }
     private CookieContainer cookieContainer = new CookieContainer();
     protected override WebRequest GetWebRequest(Uri myAddress)
     {
           WebRequest request = base.GetWebRequest(myAddress);
           if (request is HttpWebRequest)
          {
               (request as HttpWebRequest).CookieContainer =   cookieContainer  ;
          }
          return request;
      }
}


Этот код даст позволит нашему новому WebClient из WP7 Silverlight хранить куки. Попробуем это сделать:


MyCookieWebClient  myCookieClient = new  MyCookieWebClient();
myCookieClient.DownloadStringCompleted += new  DownloadStringCompletedEventHandler (  myCookieClient_DownloadStringCompleted);

myCookieClient.DownloadStringAsync(new  Uri("http://myserver.com/login?username&pass"));


Все просто!

Комментариев нет:

Отправить комментарий