HttpWebRequest 不会抛出异常



我有httpwebrequest异常的问题。我使用以下代码提出请求并捕获例外。

try
{    
    Uri url= new Uri("https://www.example.com");
    HttpWebRequest request2 =(HttpWebRequest)WebRequest.Create(url);
    request2.Timeout = 10000;
    HttpWebResponse response2 = (HttpWebResponse)request2.GetResponse();
    response2.Close();
}
catch (TimeoutException)
{
    listBox.Items.Insert(0, "Timeout");
}
catch (WebException ex)
{
    using (WebResponse response = ex.Response)
    {
        HttpWebResponse httpResponse = (HttpWebResponse)response;
        listBox.Items.Insert(0, "Status code(Benchmark):" + httpResponse.StatusCode);
    }
}
catch
{
    listBox.Items.Insert(0, "Failure");
}

在公司网络上输入不存在的URL,例如www.oiuahsdupiasduiuhid.com;它引发了WebException。我有状态代码:找不到或无法使用服务。但是,如果我在家尝试,它不会引发任何例外。它等待大约1秒钟,然后没有任何错误停止工作。我删除所有例外以查看正在发生的事情,但问题是它没有显示任何错误。您对问题有什么想法吗?

或任何建议,如何以不同的方式处理此问题?

毫不了解您的应用程序设计,特别是例外,可以进一步处理呼叫堆栈,很难说为什么它的行为就像您在家时。

但是,当我只是尝试了您的确切代码时,它确实抛出了WebException,但是httpResponse.StatusCode抛出了NullReferenceException,因为httpResponse为null。如果您有可能进一步吞咽此例外,则可以解释您看到的情况。

httpResponse在许多WebException情况下都将无效,因为您的请求没有收到任何响应,特别是在超时方案中。

在施放WebException.Response之前,您需要检查WebException.Status属性。如果该状态建议收到响应,那么您可以检查WebException.Response,否则将是无效的。尝试以下操作:

if(e.Status == WebExceptionStatus.ProtocolError) {
    listBox.Items.Insert("Status Code : {0}", 
       ((HttpWebResponse)e.Response).StatusCode);
}
else
{
    listBox.Items.Insert("Status : {0}", ex.Status);
}

作为旁注,当HttpWebResponse response2 = (HttpWebResponse)request2.GetResponse();抛出异常时,您的response2.Close();永远不会被调用,因此您应该将其包裹在使用块中:

using(HttpWebResponse response2 = (HttpWebResponse)request2.GetResponse())
{
    // do something with response
}

感谢psubsee2003。我得到了答案。这是我的代码正常工作。我在WebException中添加了以下代码。

if (ex.Status == WebExceptionStatus.ProtocolError)
 {
   using (WebResponse response = ex.Response)
{
   HttpWebResponse httpResponse = (HttpWebResponse)response;
   listBox2.Items.Insert(0, "Status:" + httpResponse.StatusCode);
}
 }
else
{
   listBox2.Items.Insert(0, "Status: " + ex.Status);
 }

相关内容

  • 没有找到相关文章

最新更新