在异步WebClient请求中获取HTTP标头

问题描述 投票:6回答:2

我正在使用System.Net.WebClient在异步模式下执行一些HTTP操作。使用异步操作的原因首先是获得进度更改指示的事实-仅适用于异步操作,如the docs所述。

因此,假设我已经设置了WebClient:

this.client = new WebClient();
this.client.UploadStringCompleted +=
    new UploadStringCompletedEventHandler(textUploadComplete);

和代表:

private void textUploadComplete(Object sender, UploadStringCompletedEventArgs e)
{
    if (e.Error != null)
    {
        // trigger UI failure notification
        return;
    }

    // FIXME not checking for response code == 200 (OK)
    // trigger UI success notification
}

因此,您假设如果未引发任何异常,则请求总是成功的(由于HTTP响应状态代码可以是!= 2xx,所以情况可能并非如此)。从UploadFileAsync的文档中,我无法确定是否也处理了非200的响应。

我是C#的[[真正的新手]],而且我似乎找不到一种方法来访问特定异步请求响应的标头。在我看来,每个WebClient在任何给定时间只能保存一个响应(或一组标题)。虽然我不会同时执行多个并行请求,但我仍然想知道是否有一种更优雅的方法来检索特定请求的响应标头/状态代码,而不必获取WebClient的“最后可用”响应。

谢谢。

我正在使用System.Net.WebClient以异步模式执行一些HTTP操作。使用异步操作的原因首先是获得进度更改指示的事实-...

c# http asynchronous webclient
2个回答
0
投票
您是否在.NET 4.5中?如果是这样,请尝试使用TaskAsync重载...您仍然需要从WebClient实例访问标头,但是使用TAP工作流我完全不会觉得这令人反感...我同意在其中执行操作会有点不对劲一个普通的事件处理程序。

0
投票
从发件人对象获取标头我刚刚在您的代码中添加了一行]
© www.soinside.com 2019 - 2024. All rights reserved.