WebClient DownloadStringAsync/UploadStringAsync和OpenWriteAsync/OpenReadAsync的区别
WebClient使用WebRequest类别提供对资源的存取。WebClient类别相较于HttpWebRequest类别,它比较像是个被封装完成专门处理网路资源存取的类别,例如:依照预设值,当使用WebClient时,该执行个体是不会传送选择性的Http标头,也就是它会依旧你使用的URI产生相对应的Http Header内容,让接收端可以有效撷取需要的内容。这样的好处可以让开发人员依基本的Header来完成任务。但其实对于Header的使用,还是有其限制在的,可以参考
< WebHeaderCollection类别 >这篇文章的介绍,里面提供了那些Header可以操作来向接收端进行沟通。
Method |
Description |
OpenWriteAysnc |
以非同步方式撷取用于将资料传送至资源的Stream,而不封锁呼叫的执行绪。使用POST命令上载HTTP资源。该方法将资料转入资料流中进行传送。 |
UploadStringAsync |
将String传送至资源,而不封锁呼叫的执行绪。指定上传的URI必须识别出可以接受使用POST方法传送之要求的资源。 |
DownloadStringAsync |
从资源下载String,而不封锁呼叫的执行绪。采用GET方法向URI下载指定资源。 |
OpenReadAsync |
以非同步方式从资源传回资料,而不封锁呼叫的执行绪。采用下载封装的方式,让资源回传时是属于一个独立的档案集合。采用GET方法向URI下载指定资源。 |
上方四种是常用于非同步作业使用的方法。然而在使用WebClient类别需要注意Silverlight针对网路存取的限制,可以参考:< Silverlight中的网路安全性存取限制 >与< Silverlight中的URL存取限制 >。另外,也许你会像我一样不太了解为何有一个DownloadStringAsync或UploadStringAsync的方法出现,因为在网路上搜寻看到WebClient类别的范例都是使用另外二种:OpenWriteAsync与OpenReadAsync来储存网路资源。也许你可以依照下方的分类来按需求使用:
〉DownloadStringAsync/UploadStringAsync:适用于当接收端接受传送资料的类型,例如:XML、JSON等其他相关文字类型。
〉OpenWriteAsync/OpenReadAsync:适用接收端使用POST方式接收/取得资料流的类型,例如:可转成Stream的资料料型。