В ASP.NET Core 2.2 было довольно просто иметь веб-сайт ASP.NET Core с интерфейсом React и работающим рендерингом на стороне сервера - поскольку SSR поддерживался "из коробки" в шаблоне ASP.NET Core + React , который внутренне запускает NodeServices для выполнения JavaScript с использованием узла.

Однако с ASP.NET Core 3.1 все уже не так просто, в основном потому, что классы SpaServices и NodeServices объявлены устаревшими и будут удалены в .NET 5, согласно эта ссылка. Так что больше не нужно выполнять javascript с узлом из C #.

Теперь, помимо информации о том, что рендеринг на стороне сервера, предложенный в ASP.NET Core 2.2, теперь устарел, единственное предложение о том, как двигаться дальше, я нашел из статьи выше:

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

Но если я правильно понимаю, чтобы иметь основанный на реакции рендеринг на стороне сервера, мне нужен сервер node.js, который будет выполнять рендеринг на стороне сервера.

Означает ли это, что если я хочу иметь веб-сайт ASP.NET Core 3.1 с внешним интерфейсом React с SSR - у меня должен быть один проект ASP.NET Core для WebAPI и другой отдельный проект Node.JS для внешнего интерфейса. конец с SSR?

А затем развернуть их на двух отдельных службах приложений Azure?

Это рекомендуемая архитектура для проектов ASP.NET Core + React?

22
alek kowalczyk 17 Дек 2019 в 21:02

2 ответа

Лучший ответ

Потратив некоторое время на исследования, вот текущие варианты:

  • Работайте на .NET Core 3.1 с NodeServices с флагом obsolete
  • Создайте отдельные проекты для back-end (asp.net) и front-end (node.js)
  • Форк / копировать NodeServices и поддерживать самостоятельно
  • Надеюсь, что в ближайшие месяцы перед выпуском .NET 5, где он будет в конце концов удален, будет NodeServices управляемый сообществом форк
4
alek kowalczyk 20 Дек 2019 в 14:53

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

Я опубликовал подготовленный стандартный шаблон на GitHub и написал посты в блоге. здесь объясняется, как включить серверный рендеринг с ASP.NET Core и React в деталях. Решение представляет собой комбинацию CRA (Create React App), сборника рассказов для CRA и стандартного шаблона ASP.NET Core MVC.

Короче говоря, я создал собственные атрибуты asp-prerender-module и asp-prerender-data. Они общаются с сервером Express на основе Node.js для получения отрендеренного HTML. После этого HTML-код, предоставляемый браузеру, «увлажняется» действиями.

2
Dawid Dworak 29 Фев 2020 в 13:43