WebClient UploadValuesTaskAsync [英] WebClient UploadValuesTaskAsync

查看:318
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆