ความแตกต่างระหว่างโครงการ MVC 5 และโครงการ Web Api


135

ฉันยังใหม่กับASP.NET MVCและWeb APIและพยายามรับข้อมูลพื้นฐาน AFAIK เรามีโครงการแม่แบบใน VS 2013 ชื่อเป็นMVC, และWeb APIBoth of them together

ฉันได้อ่านบทช่วยสอนและเรียนรู้ว่าเราสามารถสร้าง API ได้โดยใช้ MVC เพียงอย่างเดียวและกับเทมเพลต Web API

แล้วอะไรคือความแตกต่างระหว่างสิ่งเหล่านี้ตามสถาปัตยกรรมและการใช้งาน ?

คำตอบ:


182

โดยทั่วไปWeb APIคอนโทรลเลอร์เป็นMVCตัวควบคุมที่ใช้เป็นชนิดฐานของการตอบสนองของตนแทนHttpMessageResponse ActionResponseเหมือนกันในแง่อื่น ๆ ส่วนใหญ่ แตกต่างที่สำคัญระหว่างประเภทโครงการคือว่าMVC Applicationประเภทโครงการเพิ่มสิ่งที่เว็บที่เฉพาะเจาะจงเช่นเริ่มต้นCSS, JavaScriptไฟล์และทรัพยากรอื่น ๆ ที่จำเป็นสำหรับเว็บไซต์ที่ไม่จำเป็นสำหรับการ API

MVC ใช้สำหรับสร้างเว็บไซต์ ในกรณีนี้Controllersมักจะส่งคืนView(เช่นการตอบกลับ HTML) ไปยังคำขอของเบราว์เซอร์ ในทางกลับกัน Web API มักถูกสร้างขึ้นเพื่อให้แอปพลิเคชันอื่นใช้งานได้ หากคุณต้องการอนุญาตให้แอปพลิเคชันอื่นเข้าถึงข้อมูล / ฟังก์ชันของคุณคุณสามารถสร้าง Web API เพื่ออำนวยความสะดวกในการเข้าถึงนี้ ตัวอย่างเช่น Facebook มี API เพื่อให้นักพัฒนาแอพเข้าถึงข้อมูลเกี่ยวกับผู้ใช้โดยใช้แอพ Web API ไม่จำเป็นต้องมีไว้สำหรับการใช้งานสาธารณะ คุณยังสามารถสร้าง API เพื่อรองรับแอปพลิเคชันของคุณเองได้ ตัวอย่างเช่นเราสร้าง Web API เพื่อรองรับฟังก์ชัน AJAX ของเว็บไซต์ MVC ของเรา

Microsoft เปลี่ยนวิธีการนำเสนอเทมเพลตต่างๆ ตอนนี้แทนที่จะใช้เทมเพลตที่แตกต่างกันสำหรับโครงการประเภทต่างๆพวกเขาสนับสนุนให้นักพัฒนาผสมผสานเทคโนโลยี ASP.NET ภายในโครงการเดียวกันได้ตามต้องการ Microsoft เรียกสิ่งนี้vNextว่า

อัปเดต:สำหรับ ASP.NET Core นั้น Web API ได้ถูกรวมเข้ากับประเภทโครงการ MVC 6 และApiControllerคลาสจะรวมอยู่ในControllerคลาส รายละเอียดเพิ่มเติมที่: https://wildermuth.com/2016/05/10/Writing-API-Controllers-in-ASP-NET-MVC-6


1
ขอบคุณ Elad ฉันเข้าใจแล้วคุณสามารถแก้ไข ans ของคุณและเพิ่มอะไรบางอย่างเกี่ยวกับ Asp.net Identity และ Web Api 2 เพียงบางส่วนว่าจะใช้อย่างไรและเป็นประโยชน์แค่บางคำ
วน

ดังนั้นฉันจึงไม่สามารถเข้าถึงการทำงานของคอนโทรลเลอร์จากแอป dektop ได้ แม้ว่าฉันจะใช้ไวยากรณ์ GET ที่เหมาะสมเพื่อเรียก URL?
Unbreakable

70

สองเซ็นต์ของฉัน ...

  1. ในASP.Net MVC - MVC เป็นผู้Controllerตัดสินใจว่าอะไรควรจะเป็นView- กล่าวคือคอนโทรลเลอร์จะตัดสินใจว่าผู้ใช้ควร "เห็น" อะไร (ตามสถานการณ์หรือบริบทปัจจุบัน) เมื่อพวกเขาร้องขอ
  2. ในASP.Net เว็บฟอร์มที่ASPXหน้าตัดสินใจในสิ่งที่ผู้ใช้ควร“เห็น” เมื่อพวกเขาร้องขอ
  3. แต่ในWeb APIไม่มีการควบคุม / อำนาจใด ๆ ของคุณลักษณะของ Web API ในการตัดสินใจว่าผู้ใช้ควร“ เห็น” อะไรเมื่อพวกเขาร้องขอ

Web API ไม่ใช่เทคโนโลยีที่เชื่อมโยงกับเว็บไซต์เท่านั้น สามารถใช้เพื่อวัตถุประสงค์หลายอย่าง - ไม่ใช่เฉพาะเว็บไซต์ มันจึงไม่รู้ความหมายของrendering

อ่านเพิ่มเติม

  1. การวางแผนโซลูชั่นเว็บวันนี้: เว็บฟอร์ม ASP.NET MVC, Web API และ OWIN
  2. WCF หรือ ASP.NET Web APIs? สองเซ็นต์ของฉันในเรื่อง
  3. รุ่นต่อไปของ. NET - ASP.NET vNext
  4. เริ่มต้นกับ ASP.NET MVC 6

ฉันไม่สามารถบอกได้จากรหัสเปรียบเทียบว่าทำไม WebAPI จึงอ่านได้มากกว่า นอกจากนี้ดูเหมือนว่ามีบางอย่างพลิกไปที่นั่นเนื่องจากเป็น Web API ที่คาดว่าจะมีแอตทริบิวต์วิธี HTTP เช่น [HttpGet] ตรวจสอบโค้ด WebAPI (และ WebAPI 2) ที่นี่
โกเบ

2
คำตอบที่ยอมรับจะระบุว่า "โดยพื้นฐานแล้วตัวควบคุม Web API คือตัวควบคุม MVC" นั่นผิดเพียง จุดตอบของคุณออกมาว่าทั้งPOINTของ WebAPI ก็คือว่ามันไม่ได้ MVC ก็ไม่ได้มีการจัดการกับทุกสัมภาระและค่าใช้จ่ายในการจัดการกับ "ชม" และ "การแสดงผล" ... และตัวควบคุม WebApi ไม่จำเป็นต้องเชื่อมโยงกับเว็บไซต์เท่านั้น ตอบกลับดีมาก - ขอบคุณ!
FoggyDay

0

ตัวควบคุม MVC มาจากคลาสคอนโทรลเลอร์ ใน Mvc คุณสามารถส่งคืนมุมมอง Mvc achitecture ใช้สร้างแอปพลิเคชัน อย่างไรก็ตาม Web apis ใช้เพื่อให้ข้อมูลกับแอปพลิเคชันต่างๆ

Web Api ไดรฟ์จากตัวควบคุม Api และไม่คืนมุมมอง

หมายเหตุ: คุณยังสามารถสร้าง Web Api จากตัวควบคุม MVC ได้ แต่คุณต้องส่งคืนผลลัพธ์เป็น JsonResult หรือประเภทการส่งคืนเว็บที่รองรับ API อื่น ๆ


0

นอกเหนือจากคำตอบที่ให้ไว้ที่นี่แล้วตัวควบคุมที่สืบทอดมาจาก ApiController และการดำเนินการกับ Http verb POST สามารถมีพารามิเตอร์อินพุต [FromBody] ได้เพียงพารามิเตอร์เดียว หากใช้ตัวควบคุม MVC (มาจาก 'คอนโทรลเลอร์') คุณสามารถมีพารามิเตอร์อินพุตโพสต์ได้มากมาย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.