Очень часто возникает вопрос, как программно зайти на какой-либо веб-страницу и вернуть ее в виде тектстовой строки в WP7. Идеальным решением для этого подойдет использование WebClient, который вернет данные в виде простой текстовой строки, которую можно будет легко проанализировать, например с помощью LINQ.
Один из вопросов, который возникает при использовании WebClient - это отсутствие поддержки cookie. Поэтому придется управлять состоянием сеанса вручную, если вы хотите использовать что-то вроде WebClient. Нужно будет убедиться, что cookie из HttpRequest ловятся, а затем сохраняются где-нибудь. Потом их можно передать его в WebClient запрос. Вроде бы все просто.
Чтобы решить эту проблему, сделаем свои собственные cookie для WebClient:
Один из вопросов, который возникает при использовании 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"));
Все просто!
{
[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"));
Все просто!
Комментариев нет:
Отправить комментарий