如何在ASP.NET Core中使用Area

问题描述 投票:41回答:3

如何在ASP.NET Core中使用Area

我有一个需要管理员部分的应用。此部分要求将其视图放置在该区域中。所有以Admin/开头的请求都需要重定向到该区域。

asp.net-mvc-routing asp.net-core asp.net-core-mvc asp.net-mvc-areas
3个回答
69
投票

为了在ASP.NET核心应用程序中包含一个区域,首先我们需要在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?}");
});

然后在app根目录中创建一个名为Areas的文件夹,并在前者中创建另一个名为Admin的文件夹,同时在Admin中创建这些文件夹(ViewComponent是可选的):

enter image description here

现在我们在名为ControllersAdminController文件夹中创建一个控制器,内容可以是:

[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文件夹中所拥有的那样:

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已生成所有文件并添加了所需的依赖项。

但是,应用程序的启动代码可能需要对端到端工作的内容进行其他更改。如果尚未完成,请将以下代码添加到Application的Startup类中的Configure方法:

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

1
投票

路由中的区域实现首先使用VS创建区域(管理员)并将以下代码添加到Startup.cs实现的第一种方法: - 添加控制器登录和索引操作并添加以下代码,[区域(“管理员”)]是必须添加的在控制器级别上执行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" });
            });

创建区域“Guest”,添加“GuestLogin”控制器和“索引”操作,并将以下代码添加到新创建的控制器中。

[Area("Guest")]
    public class GuestLoginController : Controller
    {
        public IActionResult Index()
        {
            return Content("Area Guest Login Controller and Index Action");
        }
    }

可以使用http://localhost:111/Guest调用此路由


0
投票
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")]

这个对我有用。

© www.soinside.com 2019 - 2024. All rights reserved.