InternalServerError時HttpWebRequestのGetResponseメソッド処理ポリシー

2159 ワード

げんしょう
実装実装要求のページを符号化する場合、要求されたコードは次のコードに似ています.
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(strUrl);
req.UserAgent = "MSIE6.0";
req.Method = "GET";
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
StreamReader sr = new StreamReader(res.GetResponseStream(), strEncode);
strHtml = sr.ReadToEnd();
sr.Close();
res.Close();

しかし、私たちが要求したこのページがちょうど異常が発生したページであるか、存在しないページである場合.上のコードは
req.GetResponse();
ここでは、例外が投げ出されました.リモート・サーバからエラーが返されました.(500)内部サーバ・エラーです.
上記のコードでは,エラー発生時のページソースコードは得られない.
 
原因を分析する
(HttpWebResponse)req.GetResponse(); この行のコードでは、次のことが行われています.
サーバセグメントASP.NetプログラムにExceptionが発生した場合、クライアントアプリケーションがHTTPプロトコルエラーを受け入れた後.このHTTPプロトコルエラーをStatusに変換してWebExceptionStatusに設定する.ProtocolErrorのWebException、そしてこの異常throwを出します.
 
問題を解決する
エラーが発生したときのサーバセグメントエラーページのソースコードを取得するにはどうすればいいですか?
実は非常に簡単な方法で、エラーが発生するかどうかにかかわらず、次のコードでサーバセグメントページのソースコードを得ることができます.
 HttpWebResponse res;
try
{
res = (HttpWebResponse)req.GetResponse();
}
catch (WebException ex)
{
res = (HttpWebResponse)ex.Response;
}
StreamReader sr = new StreamReader(res.GetResponseStream(), strEncode);
strHtml = sr.ReadToEnd();
 ,WebException   StatusCode   HTTP  ,  Response   WebResponse,
  HTTP  。

 
この問題の解決方法はこんなに簡単ですが、私がこの問題に遭遇した後、Google、baiduで検索すると、意外にも多くの人が知らない.だからこのブログを整理して、この問題に悩まされている人を助けます.
 
付,HttpWebRequestの派生関係図:System.Object
   System.MarshalByRefObject
    System.Net.WebRequest
       System.IO.Packaging.PackWebRequest
       System.Net.FileWebRequest
       System.Net.FtpWebRequest
       System.Net.HttpWebRequest
 
参照先:
WEBCLIENTを使用してエラーページを取得するにはどうすればいいですか?http://topic.csdn.net/t/20061030/17/5120137.html