Похоже, вы пытаетесь избежать передачи ссылки на this
в метод. Передача this
намного лучше, чем поиск вызывающего по текущей трассировке стека. Рефакторинг для более ОО дизайна еще лучше. Вам не нужно знать звонящего. При необходимости передайте объект обратного вызова.
Веб-серверы часто возвращают страницу с ошибкой с более подробной информацией (либо HTML, либо обычный текст в зависимости от сервера). Вы можете получить это, перехватив WebException
и прочитав поток ответа из его свойства Response
.
Мне всегда нравился
Debug.WriteLine( ex.ToString() );
Попробуйте перехватить исключение HttpException и вызвать для него GetHtmlErrorMessage ()
Вы должны использовать HttpWebRequest и HttpWebResponse. WebClient - это простейшая вещь в использовании для базового веб-общения, но он не обеспечивает необходимой вам функциональности. Я думаю, что лучше сделать это, потому что это не вызовет исключения.
Я нашел полезную информацию для отладки следующим образом:
catch (WebException ex)
{
HttpWebResponse httpWebResponse = (HttpWebResponse)ex.Response;
String details = "NONE";
String statusCode = "NONE";
if (httpWebResponse != null)
{
details = httpWebResponse.StatusDescription;
statusCode = httpWebResponse.StatusCode.ToString();
}
Response.Clear();
Response.Write(ex.Message);
Response.Write("<BR />");
Response.Write(ex.Status);
Response.Write("<BR />");
Response.Write(statusCode);
Response.Write("<BR />");
Response.Write(details);
Response.Write("<BR />");
Response.Write(ex);
Response.Write("<BR />");
}