WebClient UploadValuesTaskAsync [英] WebClient UploadValuesTaskAsync
本文介绍了WebClient UploadValuesTaskAsync的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
这是我的WebClient类:
Here is my WebClient class:
class MyWebClient : WebClient
{
private CookieContainer _cookieContainer = new CookieContainer();
public MyWebClient(string url, string login, string password)
{
var data = new NameValueCollection
{
{ "username", login},
{ "password", password}
};
UploadValues(new Uri(url), data);
}
protected override WebRequest GetWebRequest(Uri address)
{
WebRequest request = base.GetWebRequest(address);
if (request is HttpWebRequest)
{
(request as HttpWebRequest).CookieContainer = _cookieContainer;
}
return request;
}
}
这是示例,我要如何使用它:
And here is sample, how i want to use it:
private MyWebClient _client;
private void btnLogin_Click(object sender, RoutedEventArgs e)
{
_client = new MyWebClient("http://website/login.php", "account", "pw");
}
private async void btnContent_Click(object sender, RoutedEventArgs e)
{
_client = await _client.DownloadStringTaskAsync("http://website");
}
我的问题是..通过此MyWebClient类,如何登录异步? 我希望有人能够帮助我,谢谢!
And my question is.. With this MyWebClient class, how can i login async? I hope someone will be able to help me, thank you!
推荐答案
You can move the login logic outside the constructor and use the UploadValuesTaskAsync
method like this:
class MyWebClient : WebClient
{
//...
private readonly string m_Uri;
private readonly string m_Login;
private readonly string m_Password;
public MyWebClient(string url, string login, string password)
{
m_Password = password;
m_Login = login;
m_Uri = url;
}
public async Task LogIn()
{
var data = new NameValueCollection
{
{"username", m_Login},
{"password", m_Password}
};
await UploadValuesTaskAsync(new Uri(m_Uri), data);
}
//...
}
然后像这样使用它:
private async void btnLogin_Click(object sender, RoutedEventArgs e)
{
_client = new MyWebClient("http://website/login.php", "account", "pw");
await _client.LogIn();
}
这篇关于WebClient UploadValuesTaskAsync的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文