2010-09-22 79 views
0

我试图从远程服务器读取HTTP响应代码,但是当它引发内部服务器错误时遇到了一些麻烦。在以下代码中,当远程机器返回错误时,GetResponse()可能会引发WebException。我目前正在捕获错误,并假设它是一个HttpStatusCode.InternalServerError,但这通常是不正确的。当远程服务器抛出内部错误时读取HttpStatusCode

var req = (HttpWebRequest)WebRequest.Create(uri); 
HttpStatusCode responseCode; 
try 
{ 
    using (var resp = (HttpWebResponse)req.GetResponse()) 
    { 
    responseCode = resp.StatusCode; 
    } 
} 
catch (WebException) 
{ 
    responseCode = HttpStatusCode.InternalServerError; 
} 

所以问题是这样的:无论远程服务器发生什么错误,我怎样才能抓取远程响应代码?我需要知道它是哪种错误类型;有没有什么办法可以从HttpWebResponse中获取这个信息,而不会试图绕过它?谢谢!

回答

1

使用它抛出获得响应,其中包含状态代码的网络异常:

catch (WebException e) 
{ 
    HttpWebResponse response = (HttpWebResponse) e.Response; 
    responseCode = response.StatusCode; 
} 

我同意这是一个有点讨厌。我不知道如何告诉HttpWebRequest只给你响应而不抛出异常(让你自己检查状态码)。

+0

完美,但是你花了那么久?! :)我以前走过这条路,但忽略了将异常强制转换为HttpWebResponse。 – 2010-09-22 08:28:38

相关问题