我之前從未使用WebClient,我不確定是否應該檢查服務器的響應,以確定上傳是否成功,或者如果沒有異常,我可以讓文件上傳。我應該檢查WebClient.UploadFile的響應以確定上傳是否成功?
如果我應該檢查回覆,我該怎麼做?解析resposeHeaders屬性?
在此先感謝。
我之前從未使用WebClient,我不確定是否應該檢查服務器的響應,以確定上傳是否成功,或者如果沒有異常,我可以讓文件上傳。我應該檢查WebClient.UploadFile的響應以確定上傳是否成功?
如果我應該檢查回覆,我該怎麼做?解析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以驗證上傳是否成功。
在msdn提供的examples中,他們檢查響應,所以它可能是很好的風格,但我傾向於自己不做,並且還沒有被燒燬。
如果上傳返回200(或200範圍)以外的StatusCode,則WebClient.UploadFile應引發WebException。
作爲一個插件,我在BizArk上有一個代碼參考庫,它包含一個WebHelper類,可以方便地同時上傳多個文件和表單值。該項目被稱爲BizArk。
因此,如果響應不好,那麼WebException會自動提升? – 2010-12-15 17:14:05
謝謝,一個很好的解釋。我正在通過Sharepoint網站,所以我期望找到正常的Web服務器響應,因此無需檢查響應。 – 2010-12-16 08:23:31