【问题标题】:C# - Unable to Obtain WebException Response from Inner ExceptionC# - 无法从内部异常获取 WebException 响应
【发布时间】:2012-06-08 22:08:09
【问题描述】:

我发现了一个异常,我通过两种方式完成了。使用第一种方法,我正在捕获完整的异常,检查内部异常是否为 WebException 类型,如果是,则获取响应流。下面是第一个示例,但是我总是得到一个零字符串响应:

catch (Exception e)
{
    if (e.InnerException is WebException)
    {
        WebException webEx = (WebException)e.InnerException;
        HttpWebResponse myResponse = webEx.Response as HttpWebResponse;
        string response = string.Empty;

        if (myResponse != null)
        {
            StreamReader strm = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
            response = strm.ReadToEnd();
            //EMPTY RESPONSE
        }
    }
}

但是,如果我捕捉到 Web 异常,并且几乎做同样的事情,我会得到很好的响应:

catch (WebException e)
{
    HttpWebResponse myResponse = e.Response as HttpWebResponse;
    string response = string.Empty;

    if (myResponse != null)
    {
        StreamReader strm = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
        response = strm.ReadToEnd();
        //POPULATED RESPONSE
    }
}

任何想法为什么我能够解析第二个示例中的响应但不能在第一个示例中解析?

【问题讨论】:

标签: c# web-services exception exception-handling


【解决方案1】:

不要看 InnerException,在第二个示例中,您正在读取捕获的异常的响应,这就是它起作用的原因。只需将其更改为这个,应该可以正常工作:

catch (Exception e)
{
  if (e is WebException)
  {
      WebException webEx = (WebException)e;
      HttpWebResponse myResponse = webEx.Response as HttpWebResponse;
      string response = string.Empty;

      if (myResponse != null)
      {
          StreamReader strm = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
          response = strm.ReadToEnd();
      }
  }
}

【讨论】:

    【解决方案2】:

    不要检查InnerException,是Exception实例导致了当前异常(From MSDN

    只需检查Exception -

            catch (Exception e)
            {
                if (e is WebException)
                {
                    WebException webEx = (WebException)e.InnerException;
                    HttpWebResponse myResponse = webEx.Response as HttpWebResponse;
                    string response = string.Empty;
    
                    if (myResponse != null)
                    {
                        StreamReader strm = new  StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
                        response = strm.ReadToEnd();
                        //EMPTY RESPONSE
                    }
                }
            }
    

    希望对你有帮助!!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-03
      • 1970-01-01
      相关资源
      最近更新 更多