HttpRequest、HttpWebRequest和WebRequest的区别
Posted
技术标签:
【中文标题】HttpRequest、HttpWebRequest和WebRequest的区别【英文标题】:Difference between HttpRequest, HttpWebRequest and WebRequest 【发布时间】:2012-01-02 19:58:11 【问题描述】:我想知道是否有人解释列出的类的区别
【问题讨论】:
两个相关问题:***.com/questions/4457791/… 和 ***.com/questions/896253/… 都有不同的答案,对我来说,这里没有回答主要问题。 【参考方案1】:HttpRequest
和 Oded already said 完全不同 - 它在服务器端生成 HTTP 请求,以便客户端(例如 HttpWebRequest
)可以读取它。
现在,在HttpWebRequest
和WebRequest
之间,虽然其中一个只是从另一个继承而来,但在实践中,如果您在创建请求时使用http://
没有区别。 似乎一切都只是代码设计。
要使用WebRequest
,我们需要Create
,它将返回一个后代类。只要我们使用它的实例,它就会充当后代类的包装器。这是remark from the docs:
WebRequest
是 .NET Framework 用于从 Internet 访问数据的请求/响应模型的 abstract 基类。使用请求/响应模型的应用程序可以以与协议无关的方式从 Internet 请求数据,其中应用程序使用WebRequest
类的实例,而特定于协议的后代类执行请求的详细信息。(...)
由于
WebRequest
类是一个抽象类,WebRequest
实例在运行时的实际行为由Create
方法返回的后代类决定。有关默认值和异常的详细信息,请参阅后代类的文档,例如HttpWebRequest
和FileWebRequest
。
免责声明
我现在才知道这一点,因为在寻找答案的同时(我在 1 小时前还不知道),我从 forums at codeguru 和 MSDN doc remarks 得到了这个,这一切都感谢google:
HttpWebRequest
类支持WebRequest
中定义的属性和方法以及其他属性和方法,使用户能够使用 HTTP 直接与服务器交互。
然后评论继续(仅选择与差异相关的一些):
不要使用
HttpWebRequest
构造函数。使用WebRequest.Create
方法初始化新的HttpWebRequest
对象。如果统一资源标识符 (URI) 的方案是 http:// 或 https://,Create
将返回一个HttpWebRequest
对象。
GetResponse
方法向RequestUri
属性中指定的资源发出同步 请求,并返回包含响应的HttpWebResponse
。您可以使用BeginGetResponse
和EndGetResponse
方法向资源发出异步请求。
HttpWebRequest
将发送到 Internet 资源的常见 HTTP 标头值公开为属性、由方法设置或由系统设置;
然后有个表there这里就不引用了。
【讨论】:
【参考方案2】:他们做不同的事情。
WebRequest
是HttpWebRequest
的抽象基类——你不能直接使用它。它是其他*Request
类(用于FTP、文件和其他类型的Web 请求)的基类。这些类都用于从网络获取资源(文件)。
还有一个WebClient
类 - 可能是所有旨在从 Internet 检索资源的 BCL 类中最简单的一个。
HttpRequest
表示对 ASP.NET 应用程序中资源的请求 - 这是Request
的服务器端。
主要区别在于HttpWebRequest
是HTTP 客户端,而HttpRequest
是服务器 端,用于ASP.NET Web 应用程序。 p>
【讨论】:
关于我得到的 WebRequest。但是 HttpRequest 和 HttpWebRequest 有什么区别呢? 怎么“不能直接使用”?我一直在用它! @Cawas - 你可以实例化WebRequest
?
@Cawas - 返回的类型不会是WebRequest
实例,而是继承类之一(比如HttpWebRequest
、FtpWebRequest
等...)。
WebClient 在后台使用 WebRequest。不错!以上是关于HttpRequest、HttpWebRequest和WebRequest的区别的主要内容,如果未能解决你的问题,请参考以下文章