我应该检查WebClient.UploadFile的响应以了解上传是否成功?
我之前从未使用过WebClient,我不确定是否应该检查服务器的响应,以确定上传是否成功,或者如果没有exception我是否可以将文件保存为已上传。
如果我应该检查响应我该怎么做? 解析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以validation上载是否成功。
如果上载返回的状态码不是200(或200范围),则WebClient.UploadFile应引发WebException。
作为一个插件,我在BizArk上有一个代码引用库,它包含一个WebHelper类,可以轻松地同时上传多个文件和表单值。 该项目名为BizArk 。
在msdn提供的示例中 ,他们检查响应,因此它可能是好的风格,但我倾向于不自己做,并且还没有被烧毁。
您还可以使用异步方法UploadFileAsync
并检查事件UploadFileCompletedEventHandler
事件中发生的事件处理程序UploadFileCompletedEventHandler
结果。 您可能必须添加其他代码以进行同步。