Должен ли я проверить ответ WebClient.UploadFile, чтобы узнать, была ли загрузка успешной? - PullRequest
8 голосов
/ 15 декабря 2010

Я никогда не использовал WebClient прежде, и я не уверен, должен ли я проверить ответ от сервера, чтобы узнать, была ли загрузка успешной, или я могу позволить файлу как загруженный, если нет исключения.

Если я должен проверить ответ, как я могу это сделать? Разбор свойства resposeHeaders?

Заранее спасибо.

Ответы [ 4 ]

18 голосов
/ 15 декабря 2010

Метод 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 для проверки успешности загрузки.

3 голосов
/ 15 декабря 2010

Если при загрузке возвращается StatusCode, отличный от 200 (или диапазона 200), WebClient.UploadFile должен вызвать WebException.

В качестве плагина у меня есть библиотека ссылок на код в BizArk, которая включает класс WebHelperпозволяет легко загружать несколько файлов и значений форм одновременно.Проект называется BizArk .

2 голосов
/ 15 декабря 2010

В примерах , предоставленных на msdn, они проверяют ответ, чтобы он мог быть хорошим стилем, но я склонен не делать это сам и еще не сгорел.

0 голосов
/ 28 августа 2018

Вы также можете использовать асинхронный метод UploadFileAsync и проверять результаты в обработчике событий UploadFileCompletedEventHandler, произошедшем из события UploadFileCompleted.Возможно, вам придется добавить дополнительный код для синхронизации.

...