Mieszasz Angular i ASP.NET MVC / Web API?

87

Pochodzę z używania ASP.NET MVC / Web API, a teraz zaczynam używać Angulara, ale nie wiem, jak należy je mieszać.

Czy po używaniu Angulara koncepcje po stronie serwera MVC nadal zapewniają jakąkolwiek wartość? A może powinienem używać interfejsu API sieci Web wyłącznie do pobierania danych dla kątowych wywołań HTTP?

Pomocne byłyby wszelkie wskazówki dotyczące przejścia faceta ASP.NET MVC do Angular

user2256870
źródło
4
Byłoby to zależne, ale myślę, że „czy powinienem używać interfejsu API sieci Web wyłącznie do pobierania danych dla kątowych wywołań HTTP” to właściwy sposób.
MikeSmithDev
Oto samouczek dotyczący tworzenia aplikacji Angular z zapleczem interfejsu API sieci Web ASP.NET Core -> medium.com/@levifuller/ ...
Levi Fuller

Odpowiedzi:

113

Czysty internetowy interfejs API

Kiedyś byłem dość hardkorowy z ASP.NET MVC, ale odkąd spotkałem Angulara, nie widzę jednego powodu, dla którego miałbym używać dowolnego frameworka generowania zawartości po stronie serwera. Pure Angular / REST (WebApi) daje bogatszy i gładszy wynik. Jest znacznie szybszy i umożliwia tworzenie witryn internetowych, które są bardzo zbliżone do aplikacji komputerowych, bez żadnych ciekawych hacków.

Angular ma trochę krzywej uczenia się, ale gdy Twój zespół go opanuje, zbudujesz znacznie lepsze witryny w krótszym czasie. Głównie ma to związek z faktem, że nie masz już wszystkich tych (mniej) problemów ze stanem.

Na przykład wyobraź sobie formularz kreatora z dowolną tradycyjną strukturą po stronie serwera. Każda strona musi zostać zweryfikowana i przesłana osobno. Być może zawartość strony zależy od wartości z poprzedniej strony. Być może użytkownik nacisnął przycisk Wstecz i ponownie przesyła poprzedni formularz. Gdzie przechowujemy stan klienta? Wszystkie te komplikacje nie istnieją podczas korzystania z Angular i REST.

Więc ... przejdź na ciemną stronę ... mamy ciasteczka.

Podobne pytanie

zero
źródło
Zgadzam się co do: szybkości i płynności tworzenia aplikacji przez Angular. W MVC lub WebForms (ugh) spędzasz ten czas na wypluwaniu znaczników, a następnie musisz wykonać kilka przebiegów, aby przykręcić kod klienta, co wydaje się dziwne, jest pracochłonne, a ze względu na rozłączony charakter marnuje dużo czasu na robienie prostych rzeczy.
moribvndvs
3
@Narayana; To daje trochę miłości do SEO.
null
5
Ponieważ kiedy zmieniam nazwę właściwości w określonym modelu, nie muszę przeszukiwać AngularJS, aby znaleźć „magiczne ciągi”? Angular jest fajny, ale w świecie .net o ścisłym bezpieczeństwie typów, ściślejsza integracja pozwala na wykorzystanie bezpieczeństwa typów po stronie serwera.
Sleeper Smith
6
@Sleeper Smith: Wiele razy pokłóciłem się z tym zespołem z ludźmi z mojego zespołu, ale ostatecznie konwencje kodowania , testy jednostkowe i separacja problemów oferują o wiele więcej niż całe bezpieczeństwo typów na świecie. Ja również chciałbym, aby JS został zastąpiony przez coś takiego jak C # , ale w rzeczywistości tak nie jest. Liczy się tylko wynik, jaki możesz osiągnąć. Twoi klienci prawdopodobnie nie przejmują się Twoimi preferencjami dotyczącymi kodowania, chcą fajnie wyglądającej, płynnie działającej witryny i chcą, aby była ona szybka. Angular wykonuje tę pracę.
zerowy
1
Na przykład, korzystając z KnockoutJS, tworzyłem normalną aplikację ASP.NET MVC i każdy widok otrzymywałby dane modelu z kontrolera MVC. Następnie te dane z serwera byłyby serializowane do JSON i stamtąd KnockoutJS przekształciłby je w obserwowalne dane, więc otrzymałem dwukierunkowe wiązanie danych. I to było świetne! Ale co teraz robimy, skoro AngularJS ma własny system routingu? Co dzieje się z routingiem MVC? Czy w ogóle go używamy? Co się teraz dzieje z widokiem „_Layout” i @RenderBody ()?
AlexRebula,
43

AngularJS jest bardziej związany z paradygmatem aplikacji jednostronicowych i jako taki nie korzysta zbytnio z technologii po stronie serwera, które renderują znaczniki. Nie ma technicznego powodu, który wykluczałby używanie ich razem, ale w praktycznym sensie, dlaczego miałbyś to robić?

SPA pobiera potrzebne zasoby (widoki JS, CSS i HTML) i działa samodzielnie, komunikując się z powrotem do usług w celu wysyłania lub pobierania danych. Tak więc technologia po stronie serwera jest nadal niezbędna do świadczenia tych usług (a także innych środków, takich jak uwierzytelnianie i tym podobne), ale części renderujące są w dużej mierze nieistotne i niezbyt przydatne, ponieważ jest to powielenie wysiłków, z wyjątkiem MVC to robi po stronie serwera, a Angular robi to na kliencie. Jeśli używasz Angulara, chcesz, aby był on dostępny na kliencie, aby uzyskać najlepsze wyniki. Możesz tworzyć formularze post HTML w Angular i pobierać częściowe widoki z akcji MVC, ale straciłbyś najlepsze i najłatwiejsze funkcje Angular i utrudniał Ci życie.

MVC jest dość elastyczny i można go używać do obsługi połączeń z aplikacji SPA. Jednak WebAPI jest lepiej dostrojone i nieco łatwiejsze w użyciu dla takich usług.

Napisałem wiele aplikacji AngularJS, w tym kilka, które migrowały z wcześniej istniejących aplikacji WebForms i MVC, a aspekt ASP.NET ewoluuje w kierunku platformy do dostarczania aplikacji AngularJS jako rzeczywistego klienta i do hostowania warstwy aplikacji klient komunikuje się przez REST (używając WebAPI). MVC to dobry framework, ale zwykle nie ma pracy w tego rodzaju aplikacjach.

Aplikacja ASP.NET staje się kolejną warstwą infrastruktury, gdzie jej obowiązki ograniczają się do:

  • Hostuj kontener zależności.
  • Połącz implementacje logiki biznesowej z kontenerem.
  • Skonfiguruj pakiety zasobów dla JS i CSS.
  • Hostuj usługi WebAPI.
  • Wymuszaj bezpieczeństwo, wykonuj logowanie i diagnostykę.
  • Współpraca z pamięcią podręczną aplikacji w celu zwiększenia wydajności.

Kolejną wielką zaletą SPA jest to, że może zwiększyć przepustowość Twojego zespołu. Jedna grupa może wysadzać usługi, podczas gdy druga leży w aplikacji klienta. Ponieważ możesz łatwo odgrywać lub mockować usługi REST, możesz mieć w pełni działającą aplikację kliencką na usługach pozorowanych i zamieniać się na prawdziwe, gdy są gotowe.

Musisz zainwestować z góry w Angular, ale to się opłaca. Ponieważ znasz już MVC, masz przewagę nad niektórymi podstawowymi koncepcjami.

moribvndvs
źródło
Ok, więc chcę korzystać z Angular i mieć zaplecze .NET, aby zachować produktywność dzięki API, Entity Framework, zabezpieczeniom itp. Czy moje strony nadal wymagają konfiguracji / układu master-child po stronie serwera? Czego do tego używam - WebForms (nie - wtedy otrzymuję stan widoku), MVC, ASP.NET Web Pages lub coś innego?
Sean
1
Technicznie rzecz biorąc, nie potrzebujesz żadnych stron serwera, stron układu itp. Wystarczy zwykły HTML. Jednak w zależności od rozmiaru i złożoności aplikacji, możesz podzielić aplikację Angular na kilka różnych aplikacji według funkcjonalności (i możesz łączyć się z jednej aplikacji do drugiej za pomocą wspólnej nawigacji lub cokolwiek innego). W takim przypadku możesz użyć strony układu, aby wszystko było SUCHE i spójne. Co więcej, prawdopodobnie używasz pakietów zasobów dla CSS lub skryptów, a strony główne, które są Razor lub cokolwiek innego, dobrze połączyłyby te rzeczy.
moribvndvs
1
Używam ASP.NET MVC od trzech lat w co najmniej 8 dużych projektach i przyzwyczaiłem się do tej dobrej, dojrzałej struktury po stronie serwera. Znam jednak znaczenie SPA i uwielbiam Angular, dlatego zdecydowałem się teraz na mini SPA lub aplikacje hybrydowe… lub „silosy SPA”, jak nazywał je Miguel Castro. Moje pytanie brzmi - co z autoryzacją i uwierzytelnianiem? Wiem, że ASP.NET MVC znacznie ułatwia to zadanie. Jak to się robi bez ASP.NET MVC?
AlexRebula,
1
@AlexRebula Myślę, że pytanie jest bardziej kwestią tego, w jaki sposób chcesz przeprowadzić uwierzytelnianie w WebApi vs MVC. Zwykle są to pliki cookie (można nawet używać plików cookie FormsAuth lub ASP.NET Identity z WebApi) lub nagłówków (OAuth itp.). Obie metody są w pełni obsługiwane zarówno przez interfejs API sieci Web, jak i przez Angular, ale wymagają wyboru sposobu implementacji. Trudno jest udzielić bardziej precyzyjnej odpowiedzi bez szczegółowych informacji o tym, co robisz i jakie są Twoje konkretne cele.
moribvndvs
@HackedByChinese Rozumiem. A teraz myślę, że byłoby naprawdę wspaniale, gdybym miał więcej czasu na
zagłębianie się
6

To zależy od projektu, nad którym pracujesz.

Jeśli angularJS jest dla Ciebie czymś nowym, wolałbym wybrać mały projekt o niskim ryzyku / presji, aby rozpocząć i upewnić się, że nauczysz się robić rzeczy we właściwy sposób (widziałem wiele projektów wykorzystujących Angularjs nieprawidłowo z powodu presji, terminów ... brak czasu na nauczenie się go w odpowiedni sposób, np. za pomocą JQuery lub dostęp do DOM wewnątrz kontrolerów itp.).

Jeśli projekt jest projektem typu green field i masz pewne doświadczenie w AngularJS, sensowne jest porzucenie ASP.net MVC i po stronie serwera postawienie na czysty REST / WebAPI.

Jeśli jest to istniejący projekt, możesz wybrać złożony podzbiór funkcji i zbudować tę stronę jako oddzielną aplikację angularJS (np. Twoja aplikacja składa się z dużej liczby standardowych stron opartych na maszynce Razor, ale potrzebujesz zaawansowanego edytora / strona, która mogłaby być elementem docelowym do zbudowania za pomocą AngularJS).

Braulio
źródło
1
Podoba mi się twoja odpowiedź i zgadzam się w większości z tym, co powiedziałeś. Jednak jest jedna rzecz, która mnie niepokoi. ASP.NET MVC to bardzo ładna i dojrzała struktura sieciowa po stronie serwera ze świetnymi wbudowanymi funkcjami, takimi jak uwierzytelnianie i autoryzacja. Napisałeś, że można porzucić ASP.NET MVC na rzecz czystego REST / WebAPI. Teraz zastanawiam się: czy uwierzytelnianie i autoryzacja są tak łatwe do wykonania, jak w ASP.NET MVC? Nie wspominając już o tym, jak łatwo jest zaimplementować OAuth dla Google itp. Więc moje pytanie brzmi, jak łatwo jest to wszystko osiągnąć za pomocą REST / WebAPI. Rozważałbym więc mini SPA.
AlexRebula,
W naszym przypadku ustawiamy token w każdym żądaniu http (domyślne pojedyncze miejsce http do jego dodania) używamy ASP .net MVC / web api AuthorizeAttribute do sprawdzenia tokena i uprawnień, można również wewnątrz metody web api pobrać ten token i wykonać bardziej precyzyjna kontrola bezpieczeństwa. Jeśli potrzebujesz protokołu OAuth, po stronie kątowej są również biblioteki, które Ci w tym pomogą.
Braulio
0

Możesz użyć frameworka Angular do programowania frontendu, tj. Do tworzenia widoków. Zapewnia solidną architekturę, a kiedy już się nauczysz, odkryjesz jej zalety w porównaniu z silnikiem widoku brzytwy Asp.net MVC. Aby pobrać dane, musisz użyć WebAPI, a projekt ASP.Net MVC obsługuje teraz kontrolery WebAPI i MVC. Możesz zapoznać się z poniższym linkiem Zacznij od tworzenia aplikacji Angular i ASP.Net MVC.

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

Obecnie dostępne są dwie struktury do tworzenia komponentów interfejsu użytkownika dla aplikacji kątowych. Użyłem obu tych frameworków w jednym z projektów kątowych, nad którymi pracowałem.

Materiał https://material.angular.io/

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

rinoy
źródło