У меня есть веб-сервис, в котором я манипулирую методами POST и GET, чтобы упростить загрузку / выгрузку некоторых файлов в архитектуре стиля клиент / сервер. Обычно пользователь может нажать кнопку, чтобы загрузить определенный файл, внести некоторые изменения в приложение, а затем нажать кнопку загрузки, чтобы отправить его обратно.
Проблема с загрузкой. Скажем, пользователь ожидает 3 файла 1.txt, 2.txt и 3.txt. За исключением 2.txt не существует на сервере.
Итак, у меня есть такой код (на стороне сервера):
public class HttpHandler : IHttpHandler
{
public void ProcessRequest
{
if (context.Request.HttpMethod == "GET")
{
GoGetIt(context)
}
}
private static void GoGetIt(HttpContext context)
{
var fileInfoOfWhereTheFileShouldBe = new FileInfo(......);
if (!fileInfoOfWhereTheFileShouldBe.RefreshExists())
{
//Remove this line below
//throw new Exception("Oh dear the file doesn't exist");
//Replace with a force return of whichever code I chose e.g. 200
??...
}
...
Итак, у меня проблема в том, что когда я запускаю приложение и использую WebClient на стороне клиента, чтобы использовать метод DownloadFile, который затем использует код, который у меня есть выше, я получаю:
WebException не обработано: удаленный сервер возвратил ошибку: (500) Внутренняя ошибка сервера.
(во время отладки) Если я присоединяюсь к браузеру и использую http://localhost:xxx/1.txt
, я могу просмотреть код на стороне сервера и выдать исключение, как предполагалось. Поэтому я думаю, мне интересно, как я могу правильно обработать внутреннюю ошибку сервера на стороне клиента, чтобы я мог вернуть что-то осмысленное, например «Файл не существует». Одна мысль состояла в том, чтобы использовать попытку catch в методе WebClient.DownloadFile(address, filename)
, но я не уверен, что это единственная ошибка, которая произойдет, то есть файл не существует.
edit: следуя решению, используя HttpResponse
Так что, если бы я использовал HttpResponse, мог бы я получить несколько советов о том, как начать?
Я удаляю исключение с клиентской стороны и заменяю его собственным HttpResponse? В общем, я думаю, я бы выбрал код для использования, скажем, 200, и принудительный код возврата 200 в этом операторе if выше. Смотрите комментарий.
Тогда на стороне клиента просто используйте If (Response.StatusCode == 200)
и делайте все, что я хочу сделать (сообщите, что пользовательский файл не существует)
Я на правильном пути?
редактировать 2:
Я пытался использовать попытку catch для моих методов копирования файлов, а затем в catch, устанавливая код состояния или описание статуса, но это выдает исключения при настройке описания статуса .. например:
context.Response.StatusDescription = ex.ToString();
context.Response.Status = ex.ToString();
ArgumentOutOfRangeException - указанный аргумент находится вне диапазона допустимых значений.