2013-06-22 6 views
1

Я использую WebRequest/WebResponse, чтобы захватить удаленный html. Когда мой код попадает на ошибку с удаленного сервера, генерируется исключение.WebResponse Try Catch

Вот пример моего кода:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 
request.UserAgent = "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.112 Safari/535.1"; 

WebResponse response = request.GetResponse(); 
string html = response.ToString(); 

Исключение становится выброшены на "ответ WebResponse = request.GetResponse();"

Если я попытаюсь обернуть его в блок try, тогда «ответ» ниже подчеркивается и говорит, что имя «ответ» не существует в текущем контексте. Вот пример:

try 
{ 
    WebResponse response = request.GetResponse(); 
} 
catch 
{ 

} 

string html = response.ToString(); 

Как проверить «ответ» при его использовании ниже?

ответ

1
WebResponse response = null; 
try 
{ 
    response = request.GetResponse(); 
} 
catch 
{ 

} 

string html = response.ToString(); 

Вы получаете ошибку во время компиляции, потому что переменная была объявлена ​​в try..catch объеме и локальные переменные могут быть доступны только в пределах своей компетенции. Область видимости по существу обозначается открывающими и закрывающимися скобками, все между скобками является частью области.

В частности, исключение, которое вы получаете, бросается при вызове request.GetResponse();.

Это означает, что вы можете спокойно привести переменную вне try..catch объема и доступа к ней в рамках метода и еще отлавливать все исключения, которые могут быть отброшены в результате вы звоните request.GetResponse();

+0

я попробовал, что хорошо. Затем я получаю «Использование непризнанной локальной переменной« ответ ». – muncherelli

+0

@muncherelli Я обновил свой ответ. Инициализируйте локальную переменную до «null». –

+0

Спасибо! Имеет смысл. – muncherelli