在HttpWebRequest中,如果你使用了如下代码:
HttpWebResponseoResponse = (HttpWebResponse)oRequest.GetResponse();
那么当你的HttpWebRequest访问某个页面时出现500错误,并且执行上面这步时
这个时候HttpWebRequest将抛出一个异常WebException,上面这步将不会运行
你原本的oResponse对象是不会存在的
相关的解决方法是捕获这个异常,从异常对象上获取Response。代码
虽然系统出现了500错误,但是并不代表一切,比如下面的返回数据:
HTTP/1.1 100 Continue
Server: Microsoft-IIS/5.0
Date: Tue, 10 Jul 2007 12:43:29 GMT
X-Powered-By: ASP.NET
HTTP/1.1 500 Internal Server Error
Server: Microsoft-IIS/5.0
Date: Tue, 10 Jul 2007 12:43:29 GMT
X-Powered-By: ASP.NET
Content-Length: 663
Content-Type: text/html
Set-Cookie: oblog=CookieDate=3&Password=xxxxxx&UserLevel=7&UserName=xxxx; expires=Tue, 08-Jul-2008 16:00:00 GMT; path=/
Cache-control: private
<html>
<head>
<script>window.location = 'http://xxx.cn/indexlogin.asp';</script> <font face="宋体" size=2>
<p>Microsoft VBScript 运行时错误</font> <font face="宋体" size=2 > 错误 '800a01a8'</font>
<p>
<font face="宋体" size=2>缺少对象: 'rs'</font>
<p>
<font face="宋体" size=2>/User_ChkLogin.asp</font><font face="宋体" size=2>,行108</font>
虽然页面500了,但是这个页面在运行时却传回了Cookies值,并且告诉浏览器跳转到'http://xxx.cn/indexlogin.asp'
如果不捕获这个Response对象的话,这里的Cookies值是得不到的。
很疑惑的是为什么Microsoft在设计webRequest对象时遇到500错误会抛出一个异常,而把Response对象重新放在异常对象中?
为什么不可以不抛出异常直接运行下去?
这种做法有点画蛇添足:不但这种异常抛出无用,而且还有不少的反作用。