HttpRequest,HttpWebRequest和WebRequest之间的区别

时间:2011-11-21 09:37:37

标签: asp.net

我想知道是否有人解释所列类别的差异

2 个答案:

答案 0 :(得分:38)

他们做不同的事情。

WebRequestHttpWebRequest的抽象基类 - 您无法直接使用它。它是其他*Request类的基类(用于FTP,文件和其他类型的Web请求)。这些类都用于从Web获取资源(文件)。

还有一个WebClient类 - 可能是最简单的用于从Internet检索资源的所有BCL类。

另一方面,

HttpRequest表示对ASP.NET应用程序中的资源的请求 - 这是Request服务器端

主要区别在于HttpWebRequest是HTTP 客户端,而HttpRequest服务器端将在ASP.NET Web中使用应用

答案 1 :(得分:8)

HttpRequest,与Oded already said完全不同 - 它在服务器端生成HTTP请求,因此客户端(例如HttpWebRequest)可以读取它。

现在,在HttpWebRequestWebRequest之间,虽然只是从另一个继承,但实际上,如果您使用 http://,则没有区别创建请求。 似乎只是关于代码设计。

要使用WebRequest,我们需要Create,这将返回后代类。只要我们使用它的实例,它就会充当后代类的包装器。这是一个remark from the docs

  

WebRequest是.NET Framework用于从Internet访问数据的请求/响应模型的抽象基类。使用请求/响应模型的应用程序可以以协议无关的方式从Internet请求数据,其中应用程序使用WebRequest类的实例,而特定于协议的后代类执行请求的详细信息

     

(...)

     

因为WebRequest类是抽象类,所以WebRequest实例在运行时的实际行为由Create方法返回的后代类确定。有关默认值和例外的详细信息,请参阅后代类的文档,例如HttpWebRequestFileWebRequest

声明

我现在才知道这一点,因为虽然也在寻找答案(1小时前我不知道),但我从forums at codeguruMSDN doc remarks得到了这一点,这完全归功于{{ 3}}:

  

HttpWebRequest类为WebRequest 中定义的属性和方法以及其他属性和方法提供支持,使用户可以使用HTTP直接与服务器进行交互。< / p>

这些评论继续(只选择某些与差异相关的那些):

  

不要使用HttpWebRequest构造函数。使用WebRequest.Create方法初始化新的HttpWebRequest个对象。如果统一资源标识符(URI)的方案是http://或https://,Create将返回HttpWebRequest个对象。

     

GetResponse方法对RequestUri属性中指定的资源发出同步请求,并返回包含 HttpWebResponse 的内容响应。您可以使用BeginGetResponseEndGetResponse方法向资源发出异步请求。

     

HttpWebRequest公开发送到Internet资源的常见HTTP标头值作为属性,由方法设置或由系统设置;

然后有一张表google我不会在这里引用。