【1】问题:

asp.NET C#  中HttpRequest 和HttpWebRequest的区别

HttpRequest 与HttpWebRequest 有什么区别?

网上中文的帖子很多,但是答案基本是拷贝MSDN的。

这个比较扯淡,看了半天还是没看出区别。

两者都是Http请求。

我们先来看看网上的答案。

【2】网上中文答案:

System.Web.HttpRequest是封装浏览器对服务器的请求的,主要用在ASP.Net中,其中包括浏览器请求的网址,查询字符串数据或表单数据等等 



而System.Net.HttpWebRequest则是用来简化网络请求的过程,从服务器上获取文件/结果的,譬如你可以在代码中用这个类冒充浏览器(设置一个UserAgent)来发请求,处理回应



第一:他们不是父子关系。   

 
第二:Syste.Net.HttpWebRequest   类是System.Net.WebRequest抽象类的一个子类,它是  
.NET   Framework   的用于访问   Internet  
数据的请求/响应模型的抽象基类。使用该请求/响应模型的应用程序可以用协议不可知的方式从   Internet  
请求数据。在这种方式下,应用程序处理   WebRequest   类的实例,而协议特定的子类则执行请求的具体细节。   

  System.Net.HttpWebRequest   类和System.Net.FileWebRequest都继承了WebRequest   

  1、FileWebRequest   类为使用   file://   方案来请求本地文件的   URI   实现   WebRequest   抽象基类。   

  2、HttpWebRequest   类对   WebRequest   中定义的属性和方法提供支持,也对使用户能够直接与使用   HTTP   的服务器交互的附加属性和方法提供支持。   

 
第三:System.Web.HttpRequest   类使   ASP.NET   能够读取客户端在   Web   请求期间发送的  
HTTP   值。HttpRequest   类的方法和属性通过   HttpApplication、HttpContext、Page  
和   UserControl   类的   Request   属性公开。   

    

 
所以使用System.Web.HttpRequest类的时候其实都是利用HttpApplication、HttpContext、Page  
和   UserControl   类的   Request  
属性。而使用System.Net.HttpWebRequest类时是为了获得一个Uri资源。自己创建。 



System.Web
命名空间提供使得可以进行浏览器与服务器通信的类和接口。此命名空间包括 HttpRequest 类(用于提供有关当前 HTTP
请求的广泛信息)、HttpResponse 类(用于管理对客户端的 HTTP 输出)以及 HttpServerUtility
类(用于提供对服务器端实用工具与进程的访问)。System.Web 还包括用于 Cookie 操作、文件传输、异常信息和输出缓存控制的类。 

System.Net
命名空间为当前网络上使用的多种协议提供了简单的编程接口。WebRequest 和 WebResponse
类形成了所谓的可插接式协议的基础,可插接式协议是网络服务的一种实现,它使您能够开发出使用 Internet
资源的应用程序,而不必考虑各种不同协议的具体细节。

【3】核心区别

两者看起来都是Http请求,只是前者需要在ASP。NET上下文中使用。

实际是不是这样的?

其实这也只是表象,最根本的区别在于:

    • System.Web.HttpRequest:Incoming,进入请求,也就是客户端访问ASP.NET 网站进入时的请求。所以只能在ASP.NET应用程序上下文里使用。
    • System.Net.HttpWebRequest:OutGoing,外发请求,可以发出一个HTTP请求,它可以干的活,就比较多了,可以模拟一个独立的客户端,向网站发送请求。

HttpRequest 和HttpWebRequest的区别的更多相关文章

  1. .net学习笔记----HttpRequest,WebRequest,HttpWebRequest区别

    WebRequest是一个虚类/基类,HttpWebRequest是WebRequest的具体实现 HttpRequest类的对象用于服务器端,获取客户端传来的请求的信息,包括HTTP报文传送过来的所 ...

  2. WebRequest/HttpWebRequest/HttpRequest/WebClient/HttpClient的区别

    1.WebRequest和HttpWebRequest WebRequest 的命名空间是: System.Net ,它是HttpWebRequest的抽象父类(还有其他子类如FileWebReque ...

  3. C#,WebRequest类、HttpWebRequest类与HttpRequest类的区别

    C#,WebRequest类和HttpWebRequest类的区别? httpWebRequest是webRequest的子类,httpWebRequest是基于http协议的 . HttpWebRe ...

  4. Http下的各种操作类.WebApi系列~通过HttpClient来调用Web Api接口

    1.WebApi系列~通过HttpClient来调用Web Api接口 http://www.cnblogs.com/lori/p/4045413.html HttpClient使用详解(java版本 ...

  5. HttpRequest,WebRequest,HttpWebRequest,WebClient,HttpClient 之间的区别

    HttpRequest,WebRequest,HttpWebRequest,WebClient,HttpClient 今天我们来聊一下他们之间的关系与区别. HttpRequest 类 .NET Fr ...

  6. HttpWebRequest类与HttpRequest类的区别

    HttpRequest类的对象用于服务器端,获取客户端传来的请求的信息,包括HTTP报文传送过来的所有信息.而HttpWebRequest用于客户端,拼接请求的HTTP报文并发送等. HttpWebR ...

  7. HttpWebRequest和WebClient的区别

     HttpWebRequest和WebClient的区别(From Linzheng): 1,HttpWebRequest是个抽象类,所以无法new的,需要调用HttpWebRequest.Creat ...

  8. $Django 虚拟环境,2.0、1.0路由层区别,Httprequest对象,视图层(fbv,cbv),文件上传

    1 虚拟环境:解决问题同一台机器上可以运行不同版本的django,  1 用pychanrm创建--->files-->newproject--->选择虚拟环境  2 setting ...

  9. WebClient, HttpClient, HttpWebRequest ,RestSharp之间的区别与抉择

    NETCore提供了三种不同类型用于生产的REST API: HttpWebRequest;WebClient;HttpClient,开源社区创建了另一个名为RestSharp的库.如此多的http库 ...

随机推荐

  1. hdoj 1862 EXCEL排序

    EXCEL排序 Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...

  2. 推荐一个markdown编辑器-Haroopad

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:推荐一个markdown编辑器-Haroopad.

  3. UserControl调用Umbraco的Data Types

    本篇文章介绍的是基于Umbraco CMS技术搭建的网站所使用的相关技术. 1.  需求: 网站前台功能有个表单提交,表单控件用到下拉列表(dropdownlist),需求是在dropdownlist ...

  4. requireJS(二)

    一.前言 requireJS(一) 本篇主要整理requirejs的一些用法,相对比较零散. 实例目录 二.优化 requirejs建议我们给每一个模块书写一个js文件.但是这样会增加网站的http请 ...

  5. 03 将MDB文件在DATAGRID中显示

    附件:http://files.cnblogs.com/xe2011/MDB_BindingSource.rar using System; using System.Collections.Gene ...

  6. richTextBox插入表格 完整版

    附件 http://files.cnblogs.com/xe2011/richTextBox_InsertTable_Full.rar 调用 richTextBoxTableDlg dlg = new ...

  7. 指向函数的指针 分类: C/C++ 2015-07-13 11:03 14人阅读 评论(0) 收藏

    原文网址:http://www.cnblogs.com/zxl2431/archive/2011/03/25/1995285.html 讲的很清楚,备份记录. (一) 用函数指针变量调用函数 可以用指 ...

  8. C++ Virtual介绍 分类: C/C++ 2015-06-16 21:36 26人阅读 评论(0) 收藏

    参考链接:http://www.cnblogs.com/xd502djj/archive/2010/09/22/1832912.html 学过C++的人都知道在类Base中加了Virtual关键字的函 ...

  9. 【转】android的startActivityForResult学习心得

    http://blog.csdn.net/yanzi1225627/article/details/7800529 从昨晚到现在终于调试通了一个startActivityForResult的例子,网上 ...

  10. 自定义String类,并且实现在STL容器中添加自定义的类型

    13.44 编写标准库string类的简化版本,命名String.你的类应该至少有一个默认构造函数和一个接受C风格字符串指针参数的构造函数.使用allocator为你的String类分配所需内存. 1 ...