У меня есть метод, в котором я вызываю DownloadData в WebClient. Этот метод вызывает исключение, поскольку URL-адрес возвращает 404. Все это ожидается по спецификациям, поскольку ресурс не существует.
Веб-клиент выдаст WebException, и мне нужно прочитать тело ответа, поскольку оно содержит объект JSON с подробной ошибкой. После этого мне нужно снова выбросить WebException, поскольку уровень все еще ожидает WebException. На данный момент я пытаюсь создать WebException с деталями из текущего следующим образом:
catch(WebException ex)
{
var response = new StreamReader(ex.Response.GetResponseStream()).ReadToEnd();
dynamic error = JsonConvert.DeserializeObject(response);
throw new WebException(error.message, null, ex.Status, ex.Response);
}
Проблема в том, что я получаю исключение при создании WebException. Это сообщение!
Лучшее совпадение перегруженного метода для 'System.Net.WebException.WebException (string, System.Net.WebExceptionStatus, System.Net.WebExceptionInternalStatus, System.Exception)' имеет некоторые недопустимые аргументы
Как будто этого конструктора не существует! Проверьте конструктор в исключении и проверьте конструктор в блоке catch.
Как видите, я использую верный конструктор. Проверьте здесь.
Что здесь происходит?
null
- звучит странно, я знаю, но это может помочь с разрешением перегрузки (если это действительно проблема). - person Manfred Radlwimmer   schedule 15.02.2017string message = error.message;
, а затем использовать это - чтобы разрешение перегрузки происходило во время компиляции, а не во время выполнения. - person Jon Skeet   schedule 15.02.2017JsonConvert.DeserializeObject<JObject>(response)
вместо этого, затем сделайтеerror['message'].ToString()
- person Callum Linington   schedule 15.02.2017