我应该检查 WebClient.UploadFile 的响应以了解上传是不是成功?
Posted
技术标签:
【中文标题】我应该检查 WebClient.UploadFile 的响应以了解上传是不是成功?【英文标题】:Should I check the response of WebClient.UploadFile to know if the upload was successful?我应该检查 WebClient.UploadFile 的响应以了解上传是否成功? 【发布时间】:2011-05-25 23:20:25 【问题描述】:我以前从未使用过WebClient,我不确定是否应该检查服务器的响应以了解上传是否成功,或者如果没有异常,我是否可以让文件上传。
如果我应该检查响应,我该怎么做?解析 resposeHeaders 属性?
提前致谢。
【问题讨论】:
【参考方案1】:UploadFile
方法返回一个 byte[]
,其中包含远程服务器返回的响应。根据服务器如何管理对上传请求的响应(以及错误条件(参见下面的注释 1)),您将需要检查该响应。您可以通过将其转换为字符串来获取字符串响应,例如这会将响应写入控制台窗口:
byte[] rawResponse = webClient.UploadFile(url,fileName);
Console.WriteLine("Remote Response: 0", System.Text.Encoding.ASCII.GetString(rawResponse));
也就是说,如果远程服务器返回 HTTP 200
以外的任何内容(即成功),则对 UploadFile 的调用将引发 WebException。您可以捕获并以最适合您的应用程序的任何方式处理它。
所以把所有东西放在一起
try
WebClient webClient = new WebClient();
byte[] rawResponse = webClient.UploadFile(url,fileName);
string response = System.Text.Encoding.ASCII.GetString(rawResponse);
...
Your response validation code
...
catch (WebException wexc)
...
Handle Web Exception
...
注意 1 举个例子,我有一个文件上传服务,除了 HTTP 200 代码之外永远不会发出任何错误,所有错误都在服务中被捕获,这些错误被“解析”成 XML 结构返回给调用者。然后调用者解析该 XML 以验证上传是否成功。
【讨论】:
谢谢,很好的解释。我正在浏览一个 Sharepoint 站点,因此我希望找到正常的 Web 服务器响应,因此无需检查响应。【参考方案2】:如果上传返回的 StatusCode 不是 200(或 200 范围),WebClient.UploadFile 应该引发 WebException。
作为一个插件,我在 BizArk 上有一个代码参考库,其中包含一个 WebHelper 类,可以轻松地同时上传多个文件和表单值。该项目名为BizArk。
【讨论】:
所以如果响应不好,那么 WebException 会自动引发吗?【参考方案3】:在 msdn 提供的 examples 中,他们会检查响应,因此这可能是一种不错的风格,但我自己不这样做,还没有被烧毁。
【讨论】:
【参考方案4】:您还可以使用异步方法UploadFileAsync
并检查事件处理程序UploadFileCompletedEventHandler
中发生的事件UploadFileCompleted
的结果。您可能需要添加额外的同步代码。
【讨论】:
以上是关于我应该检查 WebClient.UploadFile 的响应以了解上传是不是成功?的主要内容,如果未能解决你的问题,请参考以下文章
我应该检查 WebClient.UploadFile 的响应以了解上传是不是成功?