ASP.NET MVC與ASP.NET Web API的區別


WebApi和MVC的區別

  • MVC主要用來構建網站,既關心數據也關心頁面展示,而Web API只關注數據
  • Web API支持格式協商,客戶端可以通過Accept header通知服務器期望的格式
  • Web API支持Self Host,MVC目前不支持
  • Web API通過不同的http verb表達不同的動作(CRUD),MVC則通過Action名字表達動作
  • Web API內建於ASP.NET System.Web.Http命名空間下,MVC位於System.Web.Mvc命名空間下,因此model binding/filter/routing等功能有所不同
  • Web API非常適合構建移動客戶端服務

https://www.zhihu.com/question/46369458/answer/144963042

首先要重點說的是,Web API是一種無限接近於RESTful風格的輕型框架,且不是微軟提出來的,微軟在.NET上實現了這中框架—Asp.Net Web API,所以“微軟包裝”是一個極大的偏見。

就應用市場時間而論,MVC普及市場的時間比Web API時間早。為什么MVC提出來了,且都被大家公認是一種經典的web站點實現架構,為什么還要搞Web API呢?

這兩年什么炒得最火熱?互聯網。在網絡技術不斷更新和替代的過程,網絡不斷普及。互聯網產品只要你有技術,就可以做。但要說明的是,互聯網產品的用戶不再是一小部分人群,除了潛在用戶,你需要面對的是龐大的上網人群和開發者。這時候你要考慮你的WEB服務器是否能夠支持這么多的用戶,節省一點點傳輸數據的帶寬都能夠讓你的服務器輕松不少,除此之外,你還要考慮你的潛在用戶變成你的真實用戶的某刻時刻,你的服務器是否能夠順利支撐。

面對用戶,你要考慮你的產品是否能夠讓用戶使用起來感覺很“爽”,你要把用戶體驗放在首位,那么你的產品首先功能上必須穩定,不然即使有再好的創意,再耐心的用戶總會使用其它產品替代你的產品。

面對開發者,你想要把某些功能開放,這時候你必須要開放某些接口。有人會說,我也可以使用MVC來開放這些接口,沒錯是可以,但是繞遠道給你帶來的是更大的代價。

Web API 和 MVC可以說是兩個不同的東西。Web API更傾向於基於HTTP協議的服務,直接返回用戶的數據請求。MVC是建站的一種框架,傾向於返回用戶的頁面請求。

我總結了以下 ASP.NET Web API 的特性,更能說明Web API是一種數據請求框架:

  1. ASP.NET Web API 可以根據請求報文來返回的相應數據格式。包括JSON和XML。
  2. ASP.NET Web API 單獨做數據請求和MVC做頁面請求可以讓Web前端和后台更好的解耦,減少開發難度。
  3. Web API 可以更好地用在移動端網頁、桌面端網頁或者桌面程序。
  4. Web API 的宿主可以選擇多樣:WebHost,,ConsoleHost,甚至是windows Services。

類似可以理解成ashx和webform的區別

 

 

"WebApi和MVC有什么區別?"

首先要重點說的是,Web API是一種無限接近於RESTful風格的輕型框架,且不是微軟提出來的,微軟在.NET上實現了這中框架—Asp.Net Web API,所以“微軟包裝”是一個極大的偏見。

我在公司經歷了從 MVC 轉到 “Web API + 其他框架”的過程,為什么要這么做?

從需求的根本上來看,業務的布局和擴張導致是根本原因。我們要求,數據庫數據不只能夠對 Web 程序服務,對其他業務也行,甚至可以根據數據接口開放給第三方。例如,MVC 業務中,可以在前端用AJAX獲取和更新數據,也可以在后台用 HttpClient, 調用的方式不限,數據格式完全由調用方決定(XML 和 JSON 也是足夠了)。

為什么不用 MVC 來做?

MVC 框架負責的東西太多了,我們可以說它是一個重量級的框架,因為它負責了數據接口,邏輯運算和View層的顯示,為了減少 Controller 層的代碼量,我們甚至還在三層架構上加了 DAL 和 BLL 層。除此之外,MVC 只能運行在 IIS 和 新出來的 DotNetCore 中,宿主選擇比較少。

 

Web API 和 MVC可以說是兩個不同的東西。Web API更傾向於基於HTTP協議的服務,直接返回用戶的數據請求。MVC是建站的一種框架,傾向於返回用戶的頁面請求。

 

我總結了以下 ASP.NET Web API 的特性,更能說明Web API是一種數據請求框架:

  1. ASP.NET Web API 可以根據請求報文來返回的相應數據格式。包括JSON和XML。
  2. ASP.NET Web API 單獨做數據請求和MVC做頁面請求可以讓Web前端和后台更好的解耦,減少開發難度。
  3. Web API 可以更好地用在移動端網頁、桌面端網頁或者桌面程序,調用方更加多樣化。
  4. Web API 的宿主可以選擇多樣:WebHost,,ConsoleHost,甚至是windows Services。

 

 

 

增增刪刪寫了蠻多,后來發現可以用一張圖和兩段話來概括。而其他一些概念和功能上的異同(view還是json,xml,內容協商等)網上隨便一搜也有,或者推薦看看蔣金楠的兩本框架揭秘。

使用上區分,mvc主要用於建站,web api主要用於構建http服務,當然你非要用mvc來構建Uri式的Api也行,不過顯然是沒有這個必要的,一個不恰當的比喻就像是你也可以玩破解版的單機游戲,也可以通過平台進行聯機,但是始終不如steam上來得爽是吧。

 

自身實現上區分的話,兩種框架主要是在Asp .Net的基礎上進行改造,主要是對HttpModule和HttpHandler做了擴展,實現方法是不一樣的,比如說前者更像是在一層上建了第二層,引伸出更強大的路由機制,實現了諸如MvcHandler和ControllerFactory這種消息處理和后台控制器方法選擇機制,Web Api除了擴展了前者以外,另外寫出了一套獨立的,獨立於Asp .Net的消息處理管道,就像是借鑒原來房子的模型,重新設計出了另外一套別墅。這也很好地解釋了為什么Web Api可以寄宿在不同的宿主上(寄宿的本質就是利用一個具體的應用程序為Web Api提供一個運行的環境,並解決請求的接收和響應的回復),如Web Host,Self Host方式,這和WCF是相似的。而MVC只能寄宿於IIS上(不考慮.net core),就像Webform的寄宿方式。何況它們兩者雖然都有Controller和Action,但是請求的實現和響應的回復機制也是不同的,比如說Web Api處理消息有兩個核心類是HttpRequestMessage和HttpResponseMessage。這兩種框架最多只能說是模式上類似,實現上還是有很大差別的。不過兩者都是Asp .Net的組成成員,圖上表現得很清楚了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM