Когда вы разрабатываете приложение Angular, которое подключается к серверной части, в некоторых случаях вы можете захотеть обслуживать файлы внешнего интерфейса непосредственно как часть внутреннего приложения, а не как независимое приложение.

Пример? Для упрощения процесса аутентификации и авторизации.

В этом сценарии вы можете делегировать коду ASP.NET управление сеансом аутентификации (файлы cookie и т. д.), избегая необходимости управлять токенами аутентификации — с последующими проблемами истечения срока действия/обновления.

В этой статье я проведу вас через простой процесс создания приложения Angular и буду использовать его непосредственно как часть вашего веб-приложения ASP.NET Core.

Создание углового приложения

То, как мы создаем приложение Angular, не меняется, мы используем Angular CLI, как обычно:

ng new demo-app

Запустив приложение сейчас с помощью ng serve, мы увидим классический вывод шаблона starter:

Не так интересно, но для демонстрационных целей сойдет.

На этом этапе мы построим приложение, чтобы получить вывод dist.

ng build --prod

Хорошо, пока достаточно на стороне Angular. Перейдем к Visual Studio.

Создание основного приложения ASP.NET

Откройте Visual Studio и создайте новое веб-приложение, выбрав Файл › Новый проект › Веб-приложение ASP.NET Core, дайте ему имя и выберите шаблон Веб-приложение:

Если мы запустим приложение с помощью F5 (или CTRL + F5), мы увидим, что Visual Studio, как обычно, создала для нас стартовую страницу:

Мы хотим заменить этот контент нашим фактическим приложением Angular, поэтому давайте начнем с импорта проекта Angular в каталог нашего проекта ASP.NET Core.

Переместите проект Angular в каталог основного проекта ASP.NET.

Как следует из названия, мы должны взять папку, содержащую проект Angular, и переместить ее в папку, созданную для проекта Visual Studio.

Я назвал свой проект Angular demo-app, а проект ASP.NET Core DemoAngularIntegration, поэтому результирующая иерархия файловой системы будет следующей:

Теперь, когда у нас есть файлы Angular, нам нужно настроить пару вещей в нашем приложении ASP.NET.

Измените разметку _Layout.cshtml

Если мы хотим, чтобы наше приложение ASP.NET Core загружало код Angular, нам действительно нужно сослаться на эти файлы и перенести код Angular в наше приложение.

Первый шаг — изменить основную разметку _Layout.cshtml, чтобы она совпадала с файлом index.html нашего приложения Angular внутри выходной папки dist.

Откройте файл ~/Pages/Shared/_Layout.cshtml, удалите его содержимое и скопируйте/вставьте разметку из ~/[your_ng_app_name]/dist/[your_ng_app_name]/index.html.

Результат должен выглядеть примерно так:

Установите пакет NuGet BuildBundlerMinifier.

Откройте Консоль диспетчера пакетов и выполните следующую команду, чтобы установить необходимый пакет:

Install-Package BuildBundlerMinifier

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

Создайте пакеты Angular JS и CSS

Давайте воспользуемся преимуществами нового механизма bundleconfig в ASP.NET Core и настроим пакеты, которые мы будем загружать на нашей странице _Layout.

Создайте файл с именем bundleconfig.json на корневом уровне вашего приложения и вставьте следующий код json:

Обратите внимание, что вместо demo-app вы должны написать свое фактическое имя приложения Angular.

Ссылка на пакеты из _Layout

Теперь нам нужно вставить ссылки на пакеты на страницу _Layout.

Окончательный код должен быть следующим:

Если вы запустите приложение сейчас, оно не будет работать, и это потому, что мы все еще пропускаем вызов метода @RenderBody() в разметке _Layout.

Восстановить вызов метода RenderBody()

Просто поместите оператор RenderBody() вместо компонента <app-root>, переместив его на страницу ~/Pages/Index.cshtml.

В конце этой операции вы должны получить такой результат:

Запустите приложение — проверьте

Мы готовы запустить приложение, и если мы все сделали правильно, мы должны увидеть приложение Angular, обслуживаемое из приложения ASP.NET Core: