標籤:

WebApi和MVC有什麼區別?

webapi能搞的,mvc都能搞,搞不懂微軟推出webapi意義是什麼?


題主有這個疑問是很正常的,因為webapi就是mvc的一部分,所以webapi能搞得mvc當然能搞。


你們這些大牛,不要把年輕人繞暈了,初學者最容易的理解方式還是把這兩者畫點分割線!

首先,兩者的主要解決的問題不同!

MVC的主要使用場景在於Web站點的開發,他在後端實現了一套完整的MVC開發框架,能提供方便的頁面開發,默認使用Razor視圖引擎,提供了後端html構造,用戶可以方便地開發出帶頁面的站點。

而WebAPI主演提供了一套RestfulAPI的開發框架,提供了較為完整的http語義支持,主要用來做開放API,更抽象,更不注重View的生成。

從實現的角度看,雖然他倆捆綁在一起,但是兩者處理管線還是不同的。

如果你對http有較為深入理解後,你就會發現,其實他倆的界限沒那麼明顯,那麼你也許會覺得mvc做的事webAPI都能做,因為他更抽象,有時候你又不想把兩者的界限搞得那麼清晰,那麼你可以試試Nancy哈哈


"WebApi和MVC有什麼區別?"

首先要重點說的是,Web API是一種無限接近於RESTful風格的輕型框架,且不是微軟提出來的,微軟在.NET上實現了這中框架—http://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是建站的一種框架,傾向於返回用戶的頁面請求。

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

  1. http://ASP.NET Web API 可以根據請求報文來返回的相應數據格式。包括JSON和XML。

  2. http://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的組成成員,圖上表現得很清楚了。


勉強答一下

用過這倆,不能說那個複雜那個不複雜,應該認為二者對實現目標有不同的路徑,極限的講,他們可以互相代替,但是,有的路遠有的路近,類似兩條路都能上山,只不過一條路好走另外一條路風景好。

WebAPI針對數據無狀態的通訊可以說一條近路,用起來輕鬆,不複雜。但是如果你用WebAPI實現頁面生成和通訊那您慢慢欣賞景色吧,是條遠路。

MVC生成頁面等等,非常方便容易,不複雜,但是如果實現數據通信也是沒問題的,則不如WebAPI靈活,如遇到特殊需求則可能需要複雜的一些操作。


各位不清楚的不要亂答誤人子弟啊,WebAPI是MVC的一部分?竟然還有人點贊。。。看下 @潘成濤 的簡要回答。不清楚可以園子里搜下蔣金楠的博客。


還是有點不一樣,剛才我測試了一下 WebApp有Session狀態,比如許可權過濾等,如只是請求資源感覺一樣的,WebApi基於資源請求,WebApp基於方法請求


@ULiiAn Uliian 總結真是精闢,風景很好。


http://asp.net mvc 6 (http://asp.net 5)已經把它們統一了


在最新的aspnet已經沒有區別mvc和webapi了

其實mvc可以理解為webapi + web


MVC主要用於頁面生成,最終的目的是為了生成HTML.

WEBAPI是用於外部的介面,如提供給APP調用和用於前端的一些AJAX訪問。一般都是返回簡單的JSON數據格式。

----補充說明-----

有答案說MVC6沒有webapi,其實這是不對的。只是沒有單獨的webapi解決方案了而已。照樣可以建webapi的。不然對外介面怎麼玩?


我也是今天才看web api 我看了一個小時 怎麼看怎麼覺得 這貨就是個變種的mvc 如果只用 get post 我覺得我用MVC一樣實現這效果


可以理解成ashx和webform的區別


因為強迫症,所以要把ashx也包裝一下


微軟已經認識到單獨搞個webapi 是脫褲子放屁了,所以最新版的mvc6中是沒有webapi的,整合在一起了


推薦閱讀:

ASP.NET開源以後會有更多的網站選擇這個平台么?
ADO.NET的SqlParameter(String,?Object)的構造函數第二個參數不能為0?
處理XMLHttpRequest時如何判斷是否是自己網站發出的?
.net怎麼實現自己的非同步方法?
請各位前輩指導下簡練代碼的思路?

TAG:NET | MVC | ASPNETMVC |