1

私は2つの方法で行った例外をキャッチしています。最初の方法では、完全な例外をキャッチし、内部例外が 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
    }
}

2番目の例では応答を解析できるが、最初の例では解析できない理由はありますか?

4

2 に答える 2

0

InnerExceptionを見ないでください。2番目の例では、キャッチした例外からの応答を読み取っています。これが機能する理由です。これに変更するだけで、正常に動作するはずです。

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();
      }
  }
}
于 2012-06-04T22:39:20.187 に答える
-1

をチェックしないでください。現在の例外の原因InnerExceptionとなったExceptionインスタンスです ( 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
                }
            }
        }

それが役に立てば幸い !!

于 2012-10-08T09:43:38.207 に答える