Как использовать область в ядре ASP.NET

Как использовать Area в ASP.NET Core? Это не правильно документировано!

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

Чтобы включить Area в приложение ASP.NET Core, сначала нам нужно включить обычный маршрут в файл Startup.cs (лучше всего разместить его перед любым маршрутом без области):

В Startup.cs / Configure:

 app.UseMvc(routes => { routes.MapRoute("areaRoute", "{area:exists}/{controller=Admin}/{action=Index}/{id?}"); routes.MapRoute( name: "default", template: "{controller=Home}/{action=Index}/{id?}"); }); 

Затем создайте папку с именем Areas в корне приложения и создайте другой Admin внутри первого, также создайте эти папки внутри Admin (ViewComponent не является обязательным):

введите описание изображения здесь

Теперь мы создаем controller внутри папки Controllers именем AdminController , содержимое может быть похоже:

 [Area("Admin")] [Route("admin")] public class AdminController : Controller { public AdminController() { // do stuff } public IActionResult Index() { return View(); } [Route("[action]/{page:int?}")] public IActionResult Orders() { return View(); } [Route("[action]")] public IActionResult Shop() { return View(); } [Route("[action]/newest")] public IActionResult Payments() { return View(); } } 

Теперь, чтобы это сработало, вам нужно создать Views для всех действий, которые возвращают один. Иерархия для представлений похожа на то, что у вас есть в папке с не-областями:

введите описание изображения здесь

Теперь вам должно быть хорошо идти!

Вопрос: Что, если мне нужно иметь другой controller внутри моего Района?

Ответ:

Просто добавьте еще один controller рядом с AdminController и убедитесь, что маршруты похожи на следующие:

 [Area("Admin")] [Route("admin/[controller]")] public class ProductsController : Controller { public ProductsController() { // } [Route("{page:int?}")] public IActionResult Index() { return View(); } } 

Важная часть – [Route("admin/[controller]")] . С этим вы можете сохранить стиль маршрутизации в admin/controller/action/...

Scaffolding сгенерировал все файлы и добавил необходимые зависимости.

Однако код запуска приложения может потребовать дополнительных изменений для того, чтобы все работало до конца. Добавьте следующий код в метод Configure в classе запуска приложения, если он еще не был выполнен:

  app.UseMvc(routes => { route.MapRoute( name : "areas", template : "{area:exists}/{controller=Home}/{action=Index}/{id?}" ); }); 
Давайте будем гением компьютера.