HttpRequest 和HttpWebRequest的區別(轉)
【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請求,它可以乾的活,就比較多了,可以模擬一個獨立的客戶端,向網站傳送請求。
原文地址:http://www.54peixun.com/frankxulei/POST/0136f318384442858d1cce3a0f7ba986
相關文章
- HttpWebRequest和WebClient的用法HTTPWebclient
- 【轉】mysql 和 redis的區別MySqlRedis
- 轉:SAN和NAS的區別
- Latch和Lock的區別(轉)
- editchanged 和 itemchanged 的區別(轉)
- JavaScript和Java的區別(轉)JavaScript
- 轉發和重定向的區別(轉)
- 轉發和重定向的區別?
- frame和bounds的區別(轉載)
- (轉)ORACLE 中IN和EXISTS的區別Oracle
- InnoDB和MyISAM 區別(轉)
- (轉)編譯和連結的區別編譯
- malloc/free 和 new /delete 的區別 (轉)delete
- su和sudo的區別與使用(轉)
- 轉發和重定向的過程和區別
- HttpWebRequest的timeout和ReadWriteTimeoutHTTPWeb
- ../和./和/的區別
- 【轉】理解 CI 和 CD 之間的區別
- disconnect session和kill session的區別 轉Session
- 在Oracle中session和process的區別(轉)OracleSession
- 【轉】C#中virtual和abstract的區別C#
- [轉]聚集索引和非聚集索引的區別索引
- java中list、set和map 的區別(轉)Java
- [轉]IPTABLES中SNAT和MASQUERADE的區別
- Linux和DOS的FORMAT命令區別(轉)LinuxORM
- Oracle DV和OLS以及VPD的區別(轉)Oracle
- 重定向和請求轉發的區別
- 轉:samba和NFS的區別是什麼?SambaNFS
- Java入門:Hashtable和HashMap的區別(轉)JavaHashMap
- 和 的區別
- as 和 with的區別
- 轉:IDOCBAPIRFC區別和聯絡API
- [Angular] Progress HTTP Events with 'HttpRequest'AngularHTTP
- LinkedList和ArrayList的區別、Vector和ArrayList的區別
- http和https的區別/get和post的區別HTTP
- Vue中computed和watch的區別(轉載)Vue
- input屬性disabled和readonly的區別(轉)
- volatile和synchronized的區別與聯絡[轉]synchronized