我应该检查 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 的响应以了解上传是不是成功?的主要内容,如果未能解决你的问题,请参考以下文章

我应该强制 Python 类型检查吗?

我应该在哪里执行可达性检查?

我应该检查 WebClient.UploadFile 的响应以了解上传是不是成功?

我应该在删除之前检查一行是不是存在吗?

我应该检查WebClient.UploadFile的响应以了解上传是否成功?

我应该将外部库的 TypeScript 定义文件检查到 git 中吗?