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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我应该检查WebClient.UploadFile的响应以了解上传是否成功?相关的知识,希望对你有一定的参考价值。

我之前从未使用过WebClient,我不确定是否应该检查来自服务器的响应,以了解上传是否成功,或者如果没有异常我是否可以将文件设置为已上传。

如果我应该检查响应我该怎么做?解析resposeHeaders属性?

提前致谢。

答案

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以验证上载是否成功。

另一答案

如果上载返回的状态码不是200(或200范围),则WebClient.UploadFile应引发WebException。

作为一个插件,我在BizArk上有一个代码引用库,它包含一个WebHelper类,可以很容易地同时上传多个文件和表单值。该项目被称为BizArk

另一答案

在msdn提供的examples中,他们检查响应,因此它可能是好的风格,但我倾向于不自己做,并且还没有被烧毁。

另一答案

您还可以使用异步方法UploadFileAsync并检查事件处理程序UploadFileCompletedEventHandler中的结果来自事件UploadFileCompleted。您可能必须添加其他代码以进行同步。

以上是关于我应该检查WebClient.UploadFile的响应以了解上传是否成功?的主要内容,如果未能解决你的问题,请参考以下文章

WebClient UploadFile 错误

无法从 C# Rest 服务获取 WebClient.UploadFile

如何接收从 WebClient.UploadFile() 发送的文件?

当服务器具有有效的 SSL 证书时,将 WebClient.UploadFile() 与“https”一起使用时出现“握手失败...意外的数据包格式”

我应该检查 malloc() 是不是成功?

我应该啥时候检查互联网连接