2013-06-22 149 views
1

我正在使用WebRequest/WebResponse来获取一些远程HTML。当我的代码碰到来自远程服务器的错误时,会引发异常。WebResponse尝试捕获

这里是我的代码的示例:

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