การผสม Angular และ ASP.NET MVC / Web api?


87

ฉันมาจากการใช้ ASP.NET MVC / Web API และตอนนี้ฉันเริ่มใช้ Angular แต่ฉันไม่ชัดเจนเกี่ยวกับวิธีที่เหมาะสมในการผสม

เมื่อฉันใช้ Angular แนวคิดด้านการตัด MVC ยังคงให้คุณค่าหรือไม่? หรือฉันควรใช้ Web API อย่างเคร่งครัดเพื่อรับข้อมูลสำหรับการเรียก HTTP เชิงมุม

เคล็ดลับใด ๆ ที่คุณมีสำหรับ ASP.NET MVC ที่เปลี่ยนไปใช้ Angular จะเป็นประโยชน์


4
มันขึ้นอยู่กับ แต่ฉันคิดว่า "ฉันควรใช้ Web API อย่างเคร่งครัดเพื่อรับข้อมูลสำหรับการเรียก HTTP เชิงมุม" เป็นวิธีที่ถูกต้อง
MikeSmithDev

นี่คือบทช่วยสอนสำหรับการสร้างแอป Angular ด้วยแบ็กเอนด์ ASP.NET Core Web API -> medium.com/@levifuller/…
Levi Fuller

คำตอบ:


113

Pure Web API

ผมเคยเป็นไม่ยอมใครง่ายๆสวยด้วย ASP.NET MVC แต่ตั้งแต่ฉันได้พบเชิงมุมผมไม่เห็นเหตุผลหนึ่งที่ผมจะใช้ใด ๆด้านเซิร์ฟเวอร์กรอบการสร้างเนื้อหา Pure Angular / REST (WebApi) ให้ผลลัพธ์ที่สมบูรณ์ยิ่งขึ้นและราบรื่นขึ้น เร็วกว่ามากและช่วยให้คุณสร้างเว็บไซต์ที่ค่อนข้างใกล้เคียงกับแอปพลิเคชันบนเดสก์ท็อปโดยไม่ต้องแฮ็กใด ๆ

Angular มีช่วงการเรียนรู้เล็กน้อย แต่เมื่อทีมของคุณเชี่ยวชาญแล้วคุณจะสร้างเว็บไซต์ที่ดีขึ้นได้มากในเวลาที่น้อยลง สิ่งนี้ส่วนใหญ่เกี่ยวข้องกับการที่คุณไม่มีปัญหาเกี่ยวกับสถานะเหล่านี้ (น้อยกว่า) อีกต่อไป

ตัวอย่างเช่นลองนึกภาพตัวช่วยสร้างที่มีกรอบงานฝั่งเซิร์ฟเวอร์แบบดั้งเดิม แต่ละหน้าต้องได้รับการตรวจสอบและส่งแยกกัน บางทีเนื้อหาของเพจอาจขึ้นอยู่กับค่าจากหน้าที่แล้ว บางทีผู้ใช้อาจกดปุ่มย้อนกลับและกำลังส่งแบบฟอร์มก่อนหน้านี้อีกครั้ง เราจัดเก็บสถานะของลูกค้าไว้ที่ไหน? ไม่มีภาวะแทรกซ้อนทั้งหมดนี้เมื่อใช้ Angular และ REST

ดังนั้น ... มาที่ด้านมืด ... เรามีคุกกี้

คำถามที่คล้ายกัน


ฉันเห็นด้วยเรื่องความเร็วและความราบรื่นของการพัฒนาแอพผ่าน Angular ใน MVC หรือ WebForms (ugh) คุณใช้เวลานี้ในการพ่นมาร์กอัปจากนั้นต้องทำการส่งรหัสไคลเอนต์สองสามรหัสลงไปซึ่งรู้สึกแปลกใช้แรงงานมากและเนื่องจากลักษณะการตัดการเชื่อมต่อทำให้เสีย a มีเวลามากมายในการทำสิ่งง่ายๆ
moribvndvs

3
@ นารายานา; สิ่งนี้ให้ความรัก SEO
null

5
เพราะเมื่อฉันเปลี่ยนชื่อคุณสมบัติในรุ่นใดรุ่นหนึ่งฉันไม่จำเป็นต้องขุดรอบ AngularJS เพื่อหา "สายเวทย์"? Angular เป็นสิ่งที่ดี แต่ในโลกแห่งความปลอดภัยที่เข้มงวดของ. net การผสานรวมที่เข้มงวดมากขึ้นช่วยให้คุณสามารถใช้ประโยชน์จากความปลอดภัยจากฝั่งเซิร์ฟเวอร์ได้
Sleeper Smith

6
@Sleeper สมิ ธ : ผมเคยมีเรื่องนี้หลายครั้งที่มีคนในทีมของฉัน แต่ในที่สุดการประชุมรหัส , การทดสอบหน่วยและการแยกของความกังวลข้อเสนอมากขึ้นกว่าทุกความปลอดภัยชนิดในโลก ฉันก็ชอบที่จะเห็นJSถูกแทนที่ด้วยC #แต่ในความเป็นจริงมันไม่ใช่อย่างนั้น สิ่งที่สำคัญคือผลลัพธ์ที่คุณสามารถบรรลุได้ ลูกค้าของคุณอาจไม่สนใจเกี่ยวกับการตั้งค่าการเข้ารหัสของคุณพวกเขาต้องการเว็บไซต์ที่ดูดีมีประสิทธิภาพและราบรื่นและพวกเขาต้องการให้เร็ว Angularทำให้งานนั้นลุล่วง
null

1
ตัวอย่างเช่นเมื่อใช้ KnockoutJS ฉันเคยสร้างแอป ASP.NET MVC ปกติและแต่ละมุมมองจะได้รับข้อมูลโมเดลจาก MVC Controller จากนั้นข้อมูลนี้จากเซิร์ฟเวอร์จะถูกทำให้เป็นอนุกรมเป็น JSON และจากนั้น KnockoutJS จะแปลงเป็นข้อมูลที่สังเกตได้ดังนั้นฉันจะได้รับการเชื่อมโยงข้อมูลสองทาง และนั่นก็เยี่ยมมาก! แต่ตอนนี้เราจะทำอย่างไรเนื่องจาก AngularJS มีระบบเส้นทางของตัวเอง เกิดอะไรขึ้นกับการกำหนดเส้นทาง MVC เราใช้เลยหรือเปล่า? จะเกิดอะไรขึ้นกับมุมมอง "_Layout" และ @RenderBody ()
AlexRebula

43

AngularJS มีความเกี่ยวข้องกับกระบวนทัศน์แอ็พพลิเคชันหน้าเดียวมากขึ้นและด้วยเหตุนี้จึงไม่ได้รับประโยชน์มากนักจากเทคโนโลยีฝั่งเซิร์ฟเวอร์ที่แสดงผลมาร์กอัป ไม่มีเหตุผลทางเทคนิคที่ขัดขวางคุณในการใช้ร่วมกัน แต่ในทางปฏิบัติทำไมคุณถึงเป็นเช่นนั้น?

SPA ดึงข้อมูลที่ต้องการ (มุมมอง JS, CSS และ HTML) และรันด้วยตัวเองโดยสื่อสารกลับไปยังบริการเพื่อส่งหรือดึงข้อมูล ดังนั้นเทคโนโลยีฝั่งเซิร์ฟเวอร์จึงยังคงจำเป็นสำหรับการให้บริการเหล่านั้น (เช่นเดียวกับวิธีการอื่น ๆ เช่นการพิสูจน์ตัวตนและการกดไลค์) แต่ส่วนการแสดงผลส่วนใหญ่ไม่เกี่ยวข้องและไม่มีประโยชน์อย่างยิ่งเนื่องจากเป็นการซ้ำซ้อนของความพยายามยกเว้น MVC ทำ ที่ฝั่งเซิร์ฟเวอร์และ Angular ทำบนไคลเอนต์ หากคุณใช้ Angular คุณต้องการให้ไคลเอ็นต์ได้ผลลัพธ์ที่ดีที่สุด คุณสามารถสร้างรูปแบบ HTML โพสต์เชิงมุมและดึงมุมมองบางส่วนจากการกระทำ MVC ได้ แต่คุณจะพลาดคุณสมบัติที่ดีที่สุดและง่ายที่สุดของ Angular และทำให้ชีวิตของคุณยากขึ้น

MVC ค่อนข้างยืดหยุ่นและคุณสามารถใช้เพื่อให้บริการโทรจากแอปพลิเคชัน SPA อย่างไรก็ตาม WebAPI ได้รับการปรับแต่งอย่างละเอียดและใช้งานง่ายขึ้นเล็กน้อยสำหรับบริการดังกล่าว

ฉันได้เขียนแอปพลิเคชัน AngularJS จำนวนหนึ่งซึ่งรวมถึงแอปพลิเคชันสองตัวที่ย้ายจาก WebForms และแอปพลิเคชัน MVC ที่มีอยู่แล้วและด้าน ASP.NET พัฒนาไปสู่แพลตฟอร์มสำหรับส่งแอป AngularJS เป็นไคลเอนต์จริงและสำหรับการโฮสต์เลเยอร์แอปพลิเคชัน ไคลเอนต์สื่อสารผ่าน REST (โดยใช้ WebAPI) MVC เป็นเฟรมเวิร์กที่ดี แต่มักจะพบว่าตัวเองไม่มีงานในแอปพลิเคชันประเภทนี้

แอปพลิเคชัน ASP.NET กลายเป็นอีกชั้นหนึ่งของโครงสร้างพื้นฐานซึ่งความรับผิดชอบถูก จำกัด ไว้ที่:

  • โฮสต์คอนเทนเนอร์การอ้างอิง
  • เชื่อมโยงการใช้งานตรรกะทางธุรกิจเข้ากับคอนเทนเนอร์
  • ตั้งค่ากลุ่มเนื้อหาสำหรับ JS และ CSS
  • บริการโฮสต์ WebAPI
  • บังคับใช้การรักษาความปลอดภัยดำเนินการบันทึกและวินิจฉัย
  • การเชื่อมต่อกับแคชของแอปพลิเคชันเพื่อประสิทธิภาพ

สิ่งที่ยอดเยี่ยมอีกอย่างเกี่ยวกับสปาคือสามารถเพิ่มแบนด์วิดท์ของทีมของคุณได้ กลุ่มหนึ่งสามารถระเบิดบริการได้ในขณะที่อีกกลุ่มอยู่ในแอปไคลเอ็นต์ เนื่องจากคุณสามารถตัดหรือจำลองบริการ REST ได้อย่างง่ายดายคุณจึงสามารถมีแอปไคลเอ็นต์ที่ทำงานได้อย่างสมบูรณ์ในบริการจำลองและเปลี่ยนเป็นของจริงเมื่อเสร็จสิ้น

คุณต้องลงทุนล่วงหน้ากับ Angular แต่ต้องจ่ายเงินจำนวนมาก เนื่องจากคุณคุ้นเคยกับ MVC อยู่แล้วคุณจึงเข้าใจแนวคิดหลักบางประการ


โอเคฉันต้องการใช้ Angular และมี back-end. ฉันใช้อะไรสำหรับสิ่งนั้น - WebForms (ไม่ - จากนั้นฉันจะได้รับ viewstate), MVC, ASP.NET Web Pages หรืออย่างอื่น
Sean

1
ในทางเทคนิคคุณไม่จำเป็นต้องมีหน้าเซิร์ฟเวอร์หน้าเค้าโครงและอื่น ๆ เพียงแค่ใช้ HTML แบบตรง อย่างไรก็ตามขึ้นอยู่กับขนาดและความซับซ้อนของแอปพลิเคชันของคุณคุณอาจต้องการแยกแอป Angular ของคุณออกเป็นแอปพลิเคชันที่แตกต่างกันตามฟังก์ชันการทำงาน (และคุณสามารถเชื่อมโยงจากแอปหนึ่งไปยังอีกแอปหนึ่งโดยใช้การนำทางทั่วไปหรืออะไรก็ได้) ในกรณีนี้คุณสามารถใช้หน้าเค้าโครงเพื่อให้สิ่งต่างๆแห้งและสม่ำเสมอ นอกจากนี้คุณอาจใช้ชุดเนื้อหาสำหรับ CSS หรือสคริปต์และมีหน้ารูทที่เป็น Razor หรืออะไรก็ตามที่จะนำสิ่งเหล่านั้นมารวมกันได้ดี
moribvndvs

1
ฉันใช้ ASP.NET MVC มาสามปีแล้วในโปรเจ็กต์ใหญ่ ๆ อย่างน้อย 8 โปรเจ็กต์และฉันก็คุ้นเคยกับเฟรมเวิร์กฝั่งเซิร์ฟเวอร์ที่ดีและเป็นผู้ใหญ่ อย่างไรก็ตามฉันรู้ถึงความสำคัญของ SPA และฉันชื่นชอบ Angular ดังนั้นตอนนี้ฉันจึงตัดสินใจเลือกใช้มินิสปาหรือแอปไฮบริด ... หรือ "สปาไซโล" ตามที่มิเกลคาสโตรเรียกมัน คำถามของฉันคือ - แล้วการอนุญาตและการรับรองความถูกต้องล่ะ? ฉันรู้ว่า ASP.NET MVC ช่วยให้งานนี้ง่ายขึ้น จะทำอย่างไรหากไม่มี ASP.NET MVC
AlexRebula

1
@AlexRebula ฉันคิดว่าคำถามเป็นคำถามมากกว่าว่าคุณต้องการตรวจสอบสิทธิ์ใน WebApi กับ MVC อย่างไร โดยปกติจะใช้คุกกี้ (คุณสามารถใช้คุกกี้ FormsAuth หรือ ASP.NET Identity กับ WebApi) หรือส่วนหัว (OAuth เป็นต้น) ทั้งสองวิธีได้รับการสนับสนุนอย่างเต็มที่จากทั้ง Web API และ Angular แต่คุณต้องเลือกใช้งาน เป็นการยากที่จะให้คำตอบที่แม่นยำยิ่งขึ้นโดยไม่มีรายละเอียดเพิ่มเติมเกี่ยวกับสิ่งที่คุณกำลังทำและเป้าหมายเฉพาะของคุณคืออะไร
moribvndvs

@HackedByChinese ฉันเข้าใจ และตอนนี้ฉันคิดว่ามันจะดีมากถ้าฉันมีเวลาเจาะลึกมากขึ้นใน Web API มากขึ้น ...
AlexRebula

6

ขึ้นอยู่กับโครงการที่คุณกำลังดำเนินการ

หาก angularJS เป็นสิ่งใหม่สำหรับคุณฉันอยากจะเลือกโครงการที่มีความเสี่ยง / ความกดดันต่ำขนาดเล็กเพื่อเริ่มต้นและให้แน่ใจว่าคุณได้เรียนรู้วิธีการทำสิ่งต่างๆอย่างถูกต้อง (ฉันเคยเห็นหลายโครงการที่ใช้ Angularjs ผิดเพราะความกดดันกำหนดเวลา ... ไม่มีเวลาเรียนรู้ด้วยวิธีที่เหมาะสมเช่นการใช้ JQuery หรือการเข้าถึง DOM ภายในคอนโทรลเลอร์เป็นต้น ... )

หากโปรเจ็กต์เป็นฟิลด์สีเขียวและคุณมีประสบการณ์บางอย่างเกี่ยวกับ AngularJS คุณควรละทิ้ง ASP.net MVC และในฝั่งเซิร์ฟเวอร์ไปที่ REST / WebAPI ที่บริสุทธิ์

หากเป็นโปรเจ็กต์ที่มีอยู่คุณสามารถเลือกฟังก์ชันย่อยที่ซับซ้อนและสร้างเพจนั้นเป็นแอพ angularJS แยกต่างหาก (เช่นแอพของคุณประกอบด้วยเพจที่ใช้ Razor ที่มีความซับซ้อนง่าย / ปานกลางเป็นจำนวนมาก แต่คุณต้องการและตัวแก้ไขขั้นสูง / ซึ่งอาจเป็นชิ้นส่วนเป้าหมายที่จะสร้างด้วย AngularJS)


1
ฉันชอบคำตอบของคุณและเห็นด้วยกับสิ่งที่คุณพูดมากที่สุด อย่างไรก็ตามมีสิ่งหนึ่งที่ทำให้ฉันลำบาก ASP.NET MVC เป็นเว็บเฟรมเวิร์กฝั่งเซิร์ฟเวอร์ที่ดีมากพร้อมคุณสมบัติในตัวที่ยอดเยี่ยมเช่นการพิสูจน์ตัวตนและการอนุญาต คุณเขียนว่าเราสามารถละทิ้ง ASP.NET MVC เพื่อไปหา REST / WebAPI ที่บริสุทธิ์ได้ ตอนนี้ฉันสงสัยว่า: การรับรองความถูกต้องและการอนุญาตทำได้ง่ายเหมือนใน ASP.NET MVC หรือไม่? ไม่ต้องพูดถึงว่าการใช้ OAuth สำหรับ Google เป็นต้นทำได้ง่ายเพียงใดดังนั้นคำถามของฉันคือการทำ Thigs ทั้งหมดให้สำเร็จนั้นง่ายเพียงใดด้วย REST / WebAPI ดังนั้นฉันคิดว่าจะมีมินิสปา
AlexRebula

ในกรณีของเราเราตั้งค่าโทเค็นในคำขอ http ทุกรายการ (http เริ่มต้นที่เดียวเพื่อเพิ่ม) ใช้ ASP .net MVC / web api AuthorizeAttribute เพื่อตรวจสอบโทเค็นและสิทธิ์คุณสามารถรับโทเค็นและดำเนินการภายในเมธอด web api ได้เช่นกัน การตรวจสอบความปลอดภัยที่ปรับแต่งเพิ่มเติม หากคุณต้องการ OAuth มีไลบรารีที่ด้านเชิงมุมเพื่อช่วยคุณในเรื่องนั้น
Braulio

0

คุณสามารถใช้ Angular framework สำหรับการพัฒนาส่วนหน้าเช่นเพื่อสร้างมุมมอง มันมอบสถาปัตยกรรมที่แข็งแกร่งให้กับคุณและเมื่อคุณเรียนรู้แล้วคุณจะพบว่ามันมีข้อดีกว่าเอ็นจิ้นมุมมองมีดโกนของ Asp.net MVC ในการดึงข้อมูลคุณต้องใช้ WebAPI และตอนนี้โปรเจ็กต์ ASP.Net MVC รองรับทั้งตัวควบคุม WebAPI และ MVC ทันที คุณสามารถดูลิงค์ด้านล่างเริ่มต้นด้วยการพัฒนาแอปพลิเคชัน Angular และ ASP.Net MVC

http://hive.rinoy.in/angular4-and-asp-net-mvc-hybrid-application/

ปัจจุบันมีสองเฟรมเวิร์กสำหรับการพัฒนาส่วนประกอบ UI สำหรับแอพพลิเคชั่นเชิงมุม ฉันใช้ทั้งสองกรอบนี้ในโครงการเชิงมุมที่ฉันทำงาน

วัสดุ https://material.angular.io/

PrimeNG https://www.primefaces.org/primeng/#/

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