【筆記】asp.net 建立 web 專案時 MVC 與 Web API 選項的分別

以往開發時都是在舊有的 WebForm 專案下維護與開發,而最近工作要新啟一件預定使用 MVC 的專案,但在使用 Visual Studio 2017 的環境下,新建一個 .Net Framework Web 專案時,有兩個選項讓我猶豫了一下,分別是 MVC 與 Web API,雖然這不是甚麼新的東西,但由於剛接觸 asp.net MVC 有些疑惑,於是 Google 了一下兩者間的差異,在此筆記下來。

基本上,Web API 的 controller(ApiController) 是使用 HttpMessageResponse 做為 response 的基本型態,與 MVC 的 controller 不同(感謝 Kevin Tseng 大糾正),而在其它方面則大都相同。而其它不同的地方還有,選擇 MVC 應用程式專案,它會預設加入網站所需要的元素,像是 CSS 與 JavaScript 等資源檔案,而在 Web API 的部分不需要,也就不會有這些東西。

MVC 應用程式專案主要是開發一個網站,提供給使用者的瀏覽器瀏覽,因此 MVC 的 controller 在得到 request 時通常是回傳 view 也就是 response 的結果是 HTML。

Web API 的部分則通常是提供給其它應用程式使用的資料值,比方說,如果只是想要提供資料或功能供其它網站應用程式可以讀取或使用,而不需要任何網頁畫面去呈現結果,就可以使用 Web API。這邊有個示範案例,是從 Visual Studio 2017 的 Web API 範本下,再利用 Postman 去向範本的 API http://localhost:5729/api/Values 請求資料的結果:

這個 request 得到了一串 JSON 字串。那如果直接在瀏覽器上連結 http://localhost:5729/api/Values 會得到:

在瀏覽器上會得到 XML 的結果,而不是一個「通常」可以瀏覽的網頁畫面。透過 Chrome 的開發工具檢視 response 結果可以知道回傳的是一個 XML 字串:

如此可利用同一套 Web API 輔助各個不同的網站,在其它網站只需要透過 AJAX 就可以向同一個 Web API 取得想要的資料。


參考資料:http://stackoverflow.com/questions/22589245/difference-between-mvc-5-project-and-web-api-project