【问题标题】:Asp.net core 2.2 mvc 5 routing for more subfolders in ViewsAsp.net core 2.2 mvc 5 路由视图中的更多子文件夹
【发布时间】:2019-08-06 18:07:10
【问题描述】:

我正在尝试制作具有以下视图结构的网站应用程序:

Views
    Admin
        Player
            Index
            Create
            Update
    Client
        Index

等等……

问题是,既然我在 Views 中有 2 个子文件夹,我该如何处理路由?

我尝试通过以下方式在控制器中指定路由:

return View("~/Views/Admin/Player/Index.cshtml");

并在启动文件中:

            {
                routes.MapRoute(
                    name: "player",
                    template: "admin/Player"
                    );
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");   
            });

遗憾的是,我无法到达https://localhost:5001/Admin/Player/ 之类的地址(返回错误 404)

但我通过使用地址进入视图:https://localhost:5001/Player

有人可以向我解释为什么它会这样吗?以及如何绕过它?我很纠结,找不到出路。 谢谢各位!

【问题讨论】:

  • 阅读 ASP.NET MVC herehere 中的区域
  • 我在考虑Areas,但我不想改变整个项目的结构(上面的结构是示例),但我想这将是最好的选择

标签: c# asp.net model-view-controller .net-core-2.2


【解决方案1】:

您的 admin/Player 路由未指定它将选择哪个控制器。如果您有一个名为 AdminController 的控制器和一个名为 Player 的方法,那么您的默认路由将起作用。

【讨论】:

  • 谢谢,我没有意识到,虽然你有建议,因为我使用了两个子文件夹,语法看起来如何?所以我能以localhost:5001/Admin/Player 的身份联系玩家吗?如果我不使用区域
  • @R.Traymer 控制器不受文件夹结构的影响,但由它们的类名标识。所以例如你可以写: routes.MapRoute( "player", template: "admin/Player", new {controller = "Admin", action = "Player"});
  • @R.Traymer 您还可以使用 [Route("admin/Player")] 之类的 RouteAttribute 装饰器在控制器上添加路由,并且您的索引方法将使用该路由。或者您可以在单个方法上设置 RouteAttribute。
猜你喜欢
  • 2014-10-05
  • 2017-02-28
  • 1970-01-01
  • 2014-04-25
  • 2010-10-19
  • 2021-12-18
  • 2023-04-08
  • 1970-01-01
  • 2020-10-27
相关资源
最近更新 更多