首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WebClient UploadValuesTaskAsync

WebClient UploadValuesTaskAsync
EN

Stack Overflow用户
提问于 2016-01-24 15:30:03
回答 1查看 2K关注 0票数 1

这是我的WebClient课程:

代码语言:javascript
复制
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;
    }
}

这是样本,我想如何使用它:

代码语言:javascript
复制
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类,我如何登录异步?我希望有人能帮我,谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-24 16:02:35

您可以将登录逻辑移出构造函数之外,并使用如下的UploadValuesTaskAsync方法:

代码语言:javascript
复制
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);
    }

    //...
}

然后像这样使用它:

代码语言:javascript
复制
private async void btnLogin_Click(object sender, RoutedEventArgs e)
{
     _client = new MyWebClient("http://website/login.php", "account", "pw");
     await _client.LogIn();
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34977589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档