100165784.htm

来自「C#高级编程(第三版),顶死你们。。 。up」· HTM 代码 · 共 272 行 · 第 1/2 页

HTM
272
字号

<p class=a6 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;&nbsp;
int zero = 0; </span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;&nbsp;
object oZero = zero;</span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;&nbsp;
string emptyString = &quot;&quot;;</span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;&nbsp;
object oEmptyString = emptyString;</span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;&nbsp;
axWebBrowser1.Navigate(&quot;http://www.wrox.com&quot;, </span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
ref oZero, </span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
ref oEmptyString, </span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
ref oEmptyString, </span></p>

<p class=2 style='margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
ref oEmptyString);</span></p>

<p class=a6 style='margin-top:0cm;margin-right:0cm;FTEL:8.15pt;
margin-left:21.45pt;FTEL:18.45pt'><span lang=EN-US>}</span></p>

<p class=MsoNormal><span style='font-family:宋体'>在上面的代码中,使用</span><span
lang=EN-US>WebBrowser</span><span style='font-family:宋体'>控件的</span><span
lang=EN-US>Navigate()</span><span style='font-family:宋体'>方法,以发送</span><span
lang=EN-US>HTTP</span><span style='font-family:宋体'>请求,显示来自给定</span><span
lang=EN-US>URI</span><span style='font-family:宋体'>的输出。该方法的第一个参数是包含给定</span><span
lang=EN-US>URI</span><span style='font-family:宋体'>的一个字符串,第二个参数用于提供各种各样的标记,以修改浏览器的行为,例如,浏览器是否把新的</span><span
lang=EN-US>URI</span><span style='font-family:宋体'>添加到历史列表中。第三个参数包含用于显示资源的目标帧</span><span
lang=EN-US>(</span><span style='font-family:宋体'>如果有</span><span lang=EN-US>)</span><span
style='font-family:宋体'>名称。第四个参数包含随请求一起发送的</span><span lang=EN-US>POST</span><span
style='font-family:宋体'>数据,最后一个参数可以发送附加的</span><span lang=EN-US>HTTP</span><span
style='font-family:宋体'>标题信息。在本例中,我们把默认值</span><span lang=EN-US>0</span><span
style='font-family:宋体'>和空字符串赋予后面的</span><span lang=EN-US>4</span><span
style='font-family:宋体'>个参数,这些参数定义为可选的参数,但是</span><span lang=EN-US>C#</span><span
style='font-family:宋体'>不支持可选的参数,因此,需要明确地给出它们。此外,还需要显式地为这些变量声明对象引用,因为它们是按引用传递的。</span></p>

<p class=MsoNormal><span style='font-family:宋体'>调用带有上面参数的</span><span
lang=EN-US>Navigate()</span><span style='font-family:宋体'>方法的效果等同于把</span><span
lang=EN-US>URI</span><span style='font-family:宋体'>键入到</span><span lang=EN-US>Internet
Explorer</span><span style='font-family:宋体'>地址栏中。这段代码是惟一需要手动添加到</span><span
lang=EN-US>DisplayWebPage</span><span style='font-family:宋体'>项目中的代码。运行</span><span
lang=EN-US>DisplayWebPage</span><span style='font-family:宋体'>,可以得到如图</span><span
lang=EN-US>31-4</span><span style='font-family:宋体'>所示的结果。</span></p>

<p align=center><span lang=EN-US><img width=473 height=323
src="31/image004.jpg"></span></p>

<p align=center style='FTEL:8.15pt'><span style='font-family:宋体'>图</span><span
lang=EN-US>&nbsp; 31-4</span></p>

<p class=a3 style='margin-top:8.15pt;FTEL:21.45pt'><a
FTEL="_Toc507815534"><span lang=EN-US>Web Request </span></a><span
style='font-family:黑体'>和</span><span lang=EN-US> Web Response </span><span
style='font-family:黑体'>的层次</span><span style='font-family:黑体'>结构</span></p>

<p class=MsoNormal><span style='font-family:宋体'>本部分详细讨论</span><span lang=EN-US>Web
Request</span><span style='font-family:宋体'>类和</span><span lang=EN-US>Web
Response</span><span style='font-family:宋体'>类的底层体系结构。图</span><span lang=EN-US>31-5</span><span
style='font-family:宋体'>显示的是相关类的继承层次结构。</span></p>

<p align=center><span style='position:absolute;z-index:1;left:0px;margin-left:110px;
margin-top:0px;width:380px;height:260px'><img width=380 height=260
src="31/image005.gif"></span><span lang=EN-US><img width=340
height=233 src="31/image006.jpg"></span></p>

<p align=center style='FTEL:8.15pt'><span style='font-family:宋体'>图</span><span
lang=EN-US>&nbsp; 31-5</span></p>

<p class=MsoNormal><span style='font-family:宋体'>这个体系结构不仅仅包含刚才代码中使用的两个类。实际上,</span><span
lang=EN-US>WebRequest</span><span style='font-family:宋体'>类和</span><span
lang=EN-US>WebResponse</span><span style='font-family:宋体'>类都是抽象的,不能进行实例化。这些基类提供了用于处理</span><span
lang=EN-US>Web</span><span style='font-family:宋体'>请求和响应的通用功能,这些功能独立于给定操作所使用的协议。请求总是通过某一协议</span><span
lang=EN-US>(</span><span style='font-family:宋体'>例如</span><span lang=EN-US>HTTP</span><span
style='font-family:宋体'>、</span><span lang=EN-US>FTP</span><span
style='font-family:宋体'>、</span><span lang=EN-US>SMTP</span><span
style='font-family:宋体'>等</span><span lang=EN-US>)</span><span style='font-family:
宋体'>实现的,并由为该协议而编写的派生类处理。</span><span lang=EN-US>Microsoft</span><span
style='font-family:宋体'>称之为“可插入的协议”。在前面的代码中,变量定义为对基类的引用,但是</span><span
lang=EN-US>WebRequest.Create()</span><span style='font-family:宋体'>实际上给出了一个</span><span
lang=EN-US>HttpWebRequest</span><span style='font-family:宋体'>对象,</span><span
lang=EN-US>GetResponse()</span><span style='font-family:宋体'>方法实际上返回的是</span><span
lang=EN-US>HttpWebResponse</span><span style='font-family:宋体'>对象。这个基于</span><span
lang=EN-US>factory</span><span style='font-family:宋体'>的机制在客户机代码中隐藏了许多细节,以支持基于相同代码的各种协议。</span></p>

<p class=MsoNormal><span style='font-family:宋体'>有了</span><span lang=EN-US>WebRequest.Create()</span><span
style='font-family:宋体'>,在</span><span lang=EN-US>URI</span><span
style='font-family:宋体'>中就不需要专门用于处理</span><span lang=EN-US>HTTP</span><span
style='font-family:宋体'>协议的对象。</span><span lang=EN-US>WebRequest.Create()</span><span
style='font-family:宋体'>检查</span><span lang=EN-US>URI</span><span
style='font-family:宋体'>中的协议说明符,以实例化和返回一个适当类的对象。这样代码就不必了解所使用的派生类或特定协议的信息。在需要访问协议的特定功能时,应使用派生类的属性和方法,此时要把</span><span
lang=EN-US>WebRequest</span><span style='font-family:宋体'>或</span><span
lang=EN-US>WebResponse</span><span style='font-family:宋体'>的引用转换为派生类。</span></p>

<p class=MsoNormal><span style='font-family:宋体'>有了这个体系结构,就应能使用任一通用协议发送请求。但是,</span><span
lang=EN-US>Microsoft</span><span style='font-family:宋体'>目前提供的派生类只适用于</span><span
lang=EN-US>HTTP</span><span style='font-family:宋体'>、</span><span lang=EN-US>HTTPS</span><span
style='font-family:宋体'>和</span><span lang=EN-US>FILES</span><span
style='font-family:宋体'>协议。如果要利用其他的协议,例如</span><span lang=EN-US>FTP</span><span
style='font-family:宋体'>或</span><span lang=EN-US>SMTP</span><span
style='font-family:宋体'>,则需要使用</span><span lang=EN-US>Windows API</span><span
style='font-family:宋体'>编写自己的类,或者等候某个软件厂商编写一些相配的</span><span lang=EN-US>.NET</span><span
style='font-family:宋体'>类!</span><span lang=EN-US>.NET Framework 2.0</span><span
style='font-family:宋体'>版本在发布时应可以处理</span><span lang=EN-US>FTP</span><span
style='font-family:宋体'>。</span></p>

</div>
                <!-- page -->
                <div class="page" style="text-align: center">
                    <a href="100165783.htm">上一页</a>&nbsp;&nbsp;&nbsp;<a href="index.html">首页</a>&nbsp;&nbsp;&nbsp;<a href="100165785.htm">下一页</a>
                </div>
                <div style="margin: 0px auto; width: 700px; border: solid 1px #0b5f98;">
                    <div style="float: left; width: 16px; background-color: #0b5f98; color: White; padding: 1px;">
                        图书导读
                    </div>
                    <div style="float: right; width: 670px; text-align: left; line-height: 16pt; padding-left: 2px">
                        <!--导读-->
                        <h1 id="divCurrentNode2" style="color: #b83507; width: 100%; text-align: left; font-size: 12px; padding-left: 2px">当前章节:<a href='100165784.htm'><font color='red'>31.3  把输出结果显示为HTML页面</font></a></h1>
                        <div id="divRealteNod2" style="padding-left: 2px">
                        <div style='float:left;width:49%'>·<a href='100165781.htm'>31.1.2  基本的Web客户示例</a></div><div style='float:right;width:49%'>·<a href='100165782.htm'>31.1.3  上传文件</a></div><div style='float:left;width:49%'>·<a href='100165783.htm'>31.2  WebRequest类和WebResponse类</a></div><div style='float:right;width:49%'>·<a href='100165785.htm'>31.4  实用工具类</a></div><div style='float:left;width:49%'>·<a href='100165786.htm'>31.4.1  URI</a></div><div style='float:right;width:49%'>·<a href='100165787.htm'>31.4.2  IP地址和DNS名称</a></div></div>
                    </div>
                </div>
                </div>
        </div>
</body>
</html>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?