读取 WebException 的响应流时出现 WebException

Posted

技术标签:

【中文标题】读取 WebException 的响应流时出现 WebException【英文标题】:WebException when reading a WebException's response stream 【发布时间】:2009-07-22 20:07:43 【问题描述】:

我正在通过 .Net 与 Web 服务器通信。 Web 服务器抛出 500 内部服务器错误并写入详细的错误消息。

我正在尝试读取从 Web 异常接收到的错误消息,但得到另一个 Web 异常。为什么会抛出第二个 WebException?

try

  var webResponse = (HttpWebResponse)webRequest.GetResponse();

catch (WebException e)

  if (e.Status == WebExceptionStatus.ProtocolError)
  
    // the next line throws a web exception
    Console.WriteLine(new StreamReader(e.Response.GetResponseStream()).ReadToEnd());
  

【问题讨论】:

【参考方案1】:

为什么这令人惊讶?从 MSDN 尝试以下操作:

try 
   // Create a web request for an invalid site. Substitute the "invalid site" strong in the Create call with a invalid name.
     HttpWebRequest myHttpWebRequest = (HttpWebRequest) WebRequest.Create("invalid site");

    // Get the associated response for the above request.
     using (HttpWebResponse myHttpWebResponse = 
               (HttpWebResponse) myHttpWebRequest.GetResponse()) 
        myHttpWebResponse.Close();
    

catch(WebException e) 
    Console.WriteLine("This program is expected to throw WebException on successful run."+
                        "\n\nException Message :" + e.Message);
    if(e.Status == WebExceptionStatus.ProtocolError) 
        var response = ((HttpWebResponse)e.Response);
        Console.WriteLine("Status Code : 0", response.StatusCode);
        Console.WriteLine("Status Description : 0", response.StatusDescription);

        try 
            using (var stream = response.GetResponseStream()) 
            using (var reader = new StreamReader(stream)) 
                var text = reader.ReadToEnd();
                Console.WriteLine(text);
            
            
         catch (WebException ex) 
            // Oh, well, we tried
        
    

catch(Exception e) 
    Console.WriteLine(e.Message);

【讨论】:

Amm,因为我想以某种方式实际读取通过网络传输的错误消息。该网站并非不存在,它回复了一个错误,我想在客户端记录/分析。 如果网站不存在,错误来自哪里?无论如何,更新了。 而且更新仍然没有太大帮助 - 我不明白为什么我在 catch 块中遇到异常。 有趣。我错过了“非”。请发布您在 catch 块中获得的完整异常。发布 ex.ToString() 的结果。另外,如果你实现了上面的代码,那么 ((HttpWebResponse)e.Response).StatusCode 和 .StatusDescription 的值是多少?

以上是关于读取 WebException 的响应流时出现 WebException的主要内容,如果未能解决你的问题,请参考以下文章

503(服务器不可用)加载本地 XHTML 文件时出现 WebException

将输入流转换为 JSONArrary 时出现空异常

为啥在使用 Android MediaPlayer 读取 H.264 编码的 rtsp 流时出现“不支持的格式”错误?

net.jpounz.lz4 使用火花流从 kafka 读取时出现异常

坑爹微信之读取PKCS12流时出现的java.io.IOException: DerInputStream.getLength

JAVA IO流读取图片的问题