gpt4 book ai didi

c# - ASP.NET MVC - 嵌套路由/ Controller

转载 作者:行者123 更新时间:2023-11-30 13:36:18 24 4
gpt4 key购买 nike

我有一个 ASP.NET MVC 应用程序。我见过类似的问题。但是,我还没有找到好的答案。本质上,我想使用以下路线:

/admin/users
/admin/users/create
/admin/users/[someId]
/admin/roles
/admin/roles/create
/admin/roles/[someId]

我有以下文件结构:

/Controllers
AdminController.cs
/Admin
UsersController.cs
RolesController.cs
/Views
/Admin
Index.cshtml
/Users
Index.cshtml
Detail.cshtml
Create.cshtml
/Roles
Index.cshtml
Create.cshtml
Detail.cshtml

当我运行我的应用程序时,我只是得到The resource cannot be found.

我做错了什么?我设置了断点,但没有一个被击中。就像路由没有映射到 Controller 一样。不过,我不确定我需要做什么。

最佳答案

您不需要为此创建子文件夹。只要有 2 个 Controller (UsersControllerRolesController),您就可以使用属性路由来定义您想要的自定义路由模式。

假设您启用了属性路由

public class UsersController : Controller
{
[Route("admin/users")]
public ActionResult Index() { // to do : Return something }

[Route("admin/users/create")]
public ActionResult Create() { // to do : Return something }

[Route("admin/users/{id}")]
public ActionResult View(int id) { // to do : Return something }
}

或者您可以在 Controller 级别执行 RoutePrefix

[RoutePrefix("admin/users")]
public class UsersController : Controller
{
[Route("")]
public ActionResult Index() { // to do : Return something }

[Route("create")]
public ActionResult Create() { // to do : Return something }

[Route("{id}")]
public ActionResult View(int id) { // to do : Return something }
}

您也可以对 RolesController 执行相同的操作。

您可以在RouteConfig.cs 文件中的RegisterRoutes 方法中启用属性路由。

public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes(); //This line enables attribute routing
//Existing default Route definition goes here
}

您也可以考虑创建一个“管理”区域并将您的 Controller 放入其中。 Areas如果您想对相似的功能进行逻辑分组,这是正确的解决方案。

如果您不喜欢属性路由(为什么不呢?),您可以在 RouteConfig 中定义这些自定义路由模式。 定义路由的顺序很重要。因此请确保在默认通用路由之前定义特定路由

关于c# - ASP.NET MVC - 嵌套路由/ Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36338394/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com