Смешивание Angular и ASP.NET MVC / Web api?

87

Я использую ASP.NET MVC / Web API, и теперь я начинаю использовать Angular, но я не знаю, как правильно их смешивать.

После того, как я использую Angular, будут ли концепции стороны MVC-сервера по-прежнему иметь какое-либо значение? Или мне следует строго использовать веб-API исключительно для получения данных для HTTP-вызовов angular?

Любые советы, которые у вас есть для парня из ASP.NET MVC, переходящего на Angular, будут полезны.

user2256870
источник
4
Это будет зависеть от обстоятельств, но я бы подумал: «Следует ли мне строго использовать Web API только для получения данных для HTTP-вызовов angular» - это правильный способ сделать это.
MikeSmithDev
Вот руководство по созданию приложения Angular с серверной
Леви Фуллер

Ответы:

113

Чистый веб-API

Раньше я был довольно хардкорным с ASP.NET MVC, но с тех пор, как я встретил Angular, я не вижу ни одной причины, по которой я бы использовал любой структуру генерации контента на стороне сервера. Чистый Angular / REST (WebApi) дает более насыщенный и плавный результат. Это намного быстрее и позволяет создавать веб-сайты, которые довольно близко подходят к настольным приложениям, без каких-либо забавных хаков.

У Angular есть небольшая кривая обучения, но как только ваша команда освоит ее, вы сможете создавать гораздо лучшие веб-сайты за меньшее время. В основном это связано с тем, что у вас больше нет всех этих проблем с состоянием (меньше).

Например, представьте форму мастера с любой традиционной серверной структурой. Каждую страницу необходимо проверить и отправить отдельно. Возможно, содержимое страницы зависит от значений с предыдущей страницы. Возможно, пользователь нажал кнопку «Назад» и повторно отправляет предыдущую форму. Где мы храним состояние клиента? Всех этих сложностей не существует при использовании Angular и REST.

Итак ... переходим на темную сторону ... у нас есть печенье.

Аналогичный вопрос

значение NULL
источник
Я согласен с re: скорость и плавность разработки приложений с помощью Angular. В MVC или WebForms (тьфу) вы тратите это время на то, чтобы заставить его выплюнуть разметку, а затем должны сделать пару проходов, прикрепляя к нему клиентский код, что кажется странным, трудоемким и из-за отключенного характера тратит впустую много времени занимаюсь простыми вещами.
moribvndvs
3
@Narayana; Это обеспечивает некоторую любовь к SEO.
null
5
Потому что, когда я переименовываю свойство в конкретной модели, мне не нужно копаться в AngularJS в поисках «волшебных строк»? Angular - это хорошо, но в мире строгой типобезопасности .net более тесная интеграция позволяет вам использовать безопасность типов со стороны сервера.
Sleeper Smith
6
@Sleeper Smith: Я много раз спорил с людьми из моей команды, но, в конце концов, соглашения о коде , модульное тестирование и разделение задач предлагают гораздо больше, чем безопасность типов в мире. Я тоже хотел бы, чтобы JS был заменен чем-то вроде C # , но на самом деле это не так. Важно только результат, которого вы можете достичь. Ваши клиенты, вероятно, не заботятся о ваших предпочтениях в программировании, им нужен круто выглядящий, бесперебойно работающий веб-сайт, и они хотят, чтобы он работал быстро. Angular справляется с этой задачей.
null
1
Например, при использовании KnockoutJS я использовал для создания обычного приложения ASP.NET MVC, и каждое представление получало данные модели от контроллера MVC. Затем эти данные с сервера будут сериализованы в JSON, и оттуда KnockoutJS преобразует их в наблюдаемые данные, поэтому я получу двустороннюю привязку данных. И это было здорово! Но что нам теперь делать, если у AngularJS есть собственная система маршрутизации? Что происходит с маршрутизацией MVC? Мы вообще им пользуемся? Что теперь происходит с представлением «_Layout» и @RenderBody ()?
AlexRebula
43

AngularJS больше связан с парадигмой одностраничного приложения и поэтому не особо выигрывает от серверных технологий, отображающих разметку. Нет никаких технических причин, которые мешают вам использовать их вместе, но с практической точки зрения зачем?

SPA извлекает необходимые ресурсы (представления JS, CSS и HTML) и работает самостоятельно, связываясь со службами для отправки или получения данных. Таким образом, серверная технология по-прежнему необходима для предоставления этих услуг (а также других средств, таких как аутентификация и тому подобное), но части рендеринга в значительной степени неактуальны и не особенно полезны, потому что это дублирование усилий, за исключением того, что это делает MVC. на стороне сервера, а Angular делает это на стороне клиента. Если вы используете Angular, вы хотите, чтобы он был на клиенте для достижения наилучших результатов. Вы можете создавать HTML-формы для публикаций Angular и получать частичные представления из действий MVC, но вы упустите лучшие и самые простые функции Angular и усложните себе жизнь.

MVC довольно гибкий, и вы можете использовать его для обслуживания вызовов из приложения SPA. Однако WebAPI более точно настроен и немного проще в использовании для таких служб.

Я написал несколько приложений AngularJS, в том числе пару, которые мигрировали из ранее существовавших приложений WebForms и MVC, а аспект ASP.NET развивается в сторону платформы для доставки приложения AngularJS в качестве реального клиента и для размещения уровня приложения. клиент связывается через REST (используя WebAPI). MVC - прекрасный фреймворк, но обычно он не работает в подобных приложениях.

Приложение ASP.NET становится еще одним слоем инфраструктуры, где его обязанности ограничиваются:

  • Разместите контейнер зависимостей.
  • Подключите реализации бизнес-логики к контейнеру.
  • Настройте пакеты ресурсов для JS и CSS.
  • Размещайте службы WebAPI.
  • Обеспечьте безопасность, выполните регистрацию и диагностику.
  • Взаимодействие с кешами приложений для повышения производительности.

Еще одна замечательная вещь в SPA - это то, что он может увеличить пропускную способность вашей команды. Одна группа может запускать службы, а другая находится в клиентском приложении. Поскольку вы можете легко заглушить или имитировать службы REST, у вас может быть полностью работающее клиентское приложение для имитирующих сервисов и заменять его на настоящие, когда они будут готовы.

Вам действительно нужно инвестировать в Angular заранее, но это окупается. Поскольку вы уже знакомы с MVC, у вас есть некоторые базовые концепции.

moribvndvs
источник
Хорошо, поэтому я хочу использовать Angular и иметь серверную часть .NET, чтобы поддерживать мою продуктивность с помощью API, Entity Framework, безопасности и т. Д. Мои страницы по-прежнему нуждаются в конфигурации / макете master-child на стороне сервера? Что я для этого использую - WebForms (нет - тогда я получаю состояние просмотра), MVC, веб-страницы ASP.NET или что-то еще?
Шон
1
Технически вам не нужны никакие серверные страницы, страницы макета и т. Д. Достаточно просто HTML. Однако, в зависимости от размера и сложности вашего приложения, вы можете захотеть разбить приложение Angular на несколько отдельных приложений по функциональности (и вы можете ссылаться из одного приложения на другое, используя общую навигацию или что-то еще). В этом случае вы можете использовать страницу макета, чтобы все было СУХИМ и согласованным. Кроме того, вы, вероятно, используете пакеты ресурсов для CSS или скриптов и имеете корневые страницы, которые являются Razor или что-то еще, что хорошо объединит эти вещи.
moribvndvs
1
Я использую ASP.NET MVC уже три года как минимум в 8 крупных проектах и ​​привык к этой прекрасной зрелой серверной среде. Однако я знаю важность SPA, и я обожаю Angular, поэтому я решил перейти на мини-SPA или гибридные приложения ... или «бункеры SPA», как их назвал Мигель Кастро. У меня вопрос - а как насчет авторизации и аутентификации? Я знаю, что ASP.NET MVC значительно облегчает эту задачу. Как это сделать без ASP.NET MVC?
AlexRebula
1
@AlexRebula Я думаю, что вопрос больше в том, как вы хотите выполнять аутентификацию в WebApi против MVC. Обычно это файлы cookie (вы даже можете использовать файлы cookie FormsAuth или ASP.NET Identity с WebApi) или заголовки (OAuth и т. Д.). Любой из подходов полностью поддерживается как веб-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 и т. Д. Итак, мой вопрос в том, насколько легко выполнить все эти задачи с помощью REST / WebAPI. Так что я бы подумал о мини-СПА.
AlexRebula
В нашем случае мы устанавливаем токен в каждый HTTP-запрос (одно место по умолчанию http для его добавления), используя ASP .net MVC / web api AuthorizeAttribute для проверки токена и разрешений, вы также можете внутри метода веб-API получить этот токен и выполнить более точная проверка безопасности. Если вам нужен OAuth, на стороне angular есть библиотеки, которые помогут вам в этом.
Браулио
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/

В настоящее время доступны две платформы для разработки компонентов пользовательского интерфейса для приложений angular. Я использовал оба этих фреймворка в одном из проектов angular, над которым работал.

Материал https://material.angular.io/

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

риной
источник