bia*_*bit 6 c# asynchronous webclient http
我正在使用System.Net.WebClient异步模式执行一些HTTP操作.使用异步操作的原因最重要的是,我获得了进度更改指示 - 这仅适用于异步操作,如文档所述.
所以,假设我已经设置了WebClient:
this.client = new WebClient();
this.client.UploadStringCompleted +=
new UploadStringCompletedEventHandler(textUploadComplete);
Run Code Online (Sandbox Code Playgroud)
和代表:
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
}
Run Code Online (Sandbox Code Playgroud)
所以你看,我假设如果没有引发异常,请求总是成功的(可能不是这种情况,因为HTTP响应状态代码可以是!= 2xx).从UploadFileAsync的文档中我无法判断是否也处理了非200响应.
我是C#的新手,我似乎无法找到一种方法来访问特定异步请求响应的标头.在我看来,每个人WebClient只能在任何给定时间持有响应(或一组标题).
虽然我不会同时执行多个并行请求,但我仍然想知道是否有更优雅的方法来检索特定请求的响应头/状态代码,而不是必须获取"最后一个- 可用的"来自的回应WebClient.
谢谢.
您使用的是 .NET 4.5 吗?如果是这样,请尝试使用 TaskAsync 重载...您仍然需要从 WebClient 实例访问标头,但使用 TAP 工作流程我不会发现这令人反感...我同意这样做感觉有点错误一个普通的事件处理程序。
await client.UploadStringTaskAsync(...);
var headers = client.ResponseHeaders;
Run Code Online (Sandbox Code Playgroud)
最重要的是,您可以在 UI 线程上完成所有操作...不会阻塞...因此您的“触发更新 UI”实际上只是“更新 UI”。
| 归档时间: |
|
| 查看次数: |
4436 次 |
| 最近记录: |