Подтвердить что ты не робот

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

Как использовать Area в ASP.NET Core?

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

4b9b3361

Ответ 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")]

меня устраивает.