Как использовать область в ядре ASP.NET
Как использовать Area
в ASP.NET Core?
У меня есть приложение, которое нуждается в разделе администратора. Этот раздел требует, чтобы его виды были размещены в этой области. Все запросы, которые начинаются с Admin/
, должны быть перенаправлены в эту область.
Ответы
Ответ 1
Чтобы включить 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 является необязательным):
![enter image description here]()
Теперь мы создаем контроллер в папке 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();
}
}
Теперь, чтобы это сработало, вам нужно создать представления для всех действий, которые возвращают одно. Иерархия для представлений точно такая же, как у вас в папке Non-area Views:
![enter image description here]()
Теперь тебе надо идти!
Вопрос: Что делать, если у меня есть другой контроллер в моем Районе?
Ответ:
Просто добавьте еще один контроллер рядом с 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/...
Ответ 2
Scaffolding сгенерировал все файлы и добавил необходимые зависимости.
Однако в коде запуска приложения могут потребоваться дополнительные изменения, чтобы все работало непрерывно. Добавьте следующий код в метод Configure в классе запуска приложений, если это еще не сделано:
app.UseMvc(routes =>
{
route.MapRoute(
name : "areas",
template : "{area:exists}/{controller=Home}/{action=Index}/{id?}"
);
});
Ответ 3
Реализация областей в маршрутизации Сначала создайте область (Admin) с использованием VS и добавьте следующий код в Startup.cs. Первый способ реализовать: - Добавить логин контроллера и действие индекса и добавить следующий код, [Area ("Admin")] необходимо добавить на уровне контроллера для выполнения областей маршрутизации asp.net. Startup.cs
app.UseMvc(routes =>
{
routes.MapRoute(
name: "areas",
template: "{area:exists}/{controller=Login}/{action=Index}/{id?}"
);
});
Примечание: Маршрутизация области должна быть помещена сначала с маршрутизацией без зоны, зона: существует обязательна, чтобы добавить маршрутизацию области.
Код контроллера:
[Area("Admin")]
public class LoginController : Controller
{
public IActionResult Index()
{
return Content("Area Admin Login Controller and Index Action");
}
}
Этот маршрут может быть вызван с использованием http://localhost: 111/Admin
Второй способ реализовать маршрутизацию области: - Добавить следующий код в startup.cs.
app.UseMvc(routes =>
{
routes.MapAreaRoute(
name: "default",
areaName: "Guest",
template: "Guest/{controller}/{action}/{id?}",
defaults: new { controller = "GuestLogin", action = "Index" });
});
Создайте область "Гость", добавьте контроллер "GuestLogin" и действие "Индекс" и добавьте следующий код во вновь созданный контроллер.
[Area("Guest")]
public class GuestLoginController : Controller
{
public IActionResult Index()
{
return Content("Area Guest Login Controller and Index Action");
}
}
Этот маршрут может быть вызван с использованием http://localhost: 111/Guest
Ответ 4
With .net core, following is needed to be added in the startup file if you are adding an area:
app.UseMvc(routes =>
{
routes.MapRoute(
name: "areas",
template: "{area:exists}/{controller=Home}/{action=Index}/{id?}"
);
});
After that you can just simply mark your area and route in the controller, i.e
[Area("Order")]
[Route("order")]
меня устраивает.