MVC определяется «соглашением о конфигурации».Другими словами, он ожидает, что контроллеры будут в папке с именем Controllers, он ожидает, что представления будут в Views / ControllerName или Views / Shared и т. Д., Так что это легче сказать, чем сделать.
Если вы фанатичныоб этом я хотел бы создать второй проект MVC, а в родительском проекте добавить ссылку на недавно созданный дочерний проект.
Я полагаю, что вашему родительскому проекту все еще потребуются действия контроллера, которые отражают действия вдочерний контроллер, но это могут быть простые прокси, которые просто возвращают IActionResult дочернего.Например:
public IActionResult ParentAction()
{
var childController = new ChildApp.Controllers.ChildController(); // You may need to pass in any dependencies yourself
return childController.ChildAction();
}
Это устраняет большую часть головной боли при переписывании контроллеров и позволяет автоматически отражать изменения в дочернем проекте.Теперь, если вы перейдете к localhost: 1234 / Parent / ParentAction, вы увидите следующую ошибку:
InvalidOperationException: The view 'ParentAction' was not found. The following locations were searched:
/Views/Parent/ParentAction.cshtml
/Views/Shared/ParentAction.cshtml
/Pages/Shared/ParentAction.cshtml
Это потому, что ваше представление находится в дочернем проекте, а не в родительском проекте, и, следовательно, ненайден родительским контроллером. Эта статья и ссылка на ссылку должны дать вам представление о том, как настроить родительский проект для обращения к представлениям в каталоге дочернего проекта, чтобы избавиться от этой ошибки.Далее, я подозреваю, что вы обнаружите, что все ссылки, относящиеся к корню, такие как ~/js/myscript.js
, не работают, потому что они находятся в wwwroot дочернего проекта, а не в родительском проекте.Возможно, вы могли бы установить символическую ссылку в вашей файловой структуре или что-то для ссылки на дочерний проект из родительского проекта, но я этого не проверял.
Я думаю, что лучшим решением было бы опубликовать оба проектаотдельно, и родительский проект загружает контент из дочернего проекта по мере необходимости.Вы можете исследовать обратные прокси, чтобы увидеть пример того, как это будет работать.Вы можете ссылаться на скрипты и изображения по мере необходимости, используя полный URL.Вы можете формировать содержимое по мере необходимости, если установлены правильные заголовки запроса (см. X-Frame-Options).Дочерние контроллеры также могут предоставлять данные родителю, действуя как API.