【问题标题】:Controller's URL in Area is too long, how to shorten URL?控制器在Area中的URL太长,如何缩短URL?
【发布时间】:2016-11-18 21:07:58
【问题描述】:

我是 MVC 中区域术语的新手,我想使用它。我有以下目录指向区域中的控制器。

Areas > Admin > Controllers > AdminController

当我要访问AdminController的Index Action时,需要访问http://localhost/Admin/Admin。我想摆脱第二个“管理员”。我只想输入http://localhost/Admin/。我该怎么做?

AdminAreaRegistration.cs 有以下 MapRoute

public override void RegisterArea(AreaRegistrationContext context) 
{
    context.MapRoute(
    "Admin_default",
    "Admin/{controller}/{action}/{id}",
    new { action = "Index", id = UrlParameter.Optional }
    );
}

【问题讨论】:

  • 给一个默认的控制器 - new { controller = "Admin", action = "Index", id = UrlParameter.Optional }(但是如果你在其中有一个同名的控制器,那就有点违背了拥有区域的目的)
  • 成功了,谢谢。但是,我不明白。当你把"new { controller = "Admin", action = "Index", id = UrlParameter.Optional }" 的时候,是不是表示你指定默认控制器是Admin?
  • 是的,如果 url 是 .../Admin,它将匹配您的 "Admin_default", 路由(它以“Admin”开头)。因为您没有提供第二段(用于控制器),它将使用控制器和操作的默认值(实际上与 .../Admin/Admin/Index 相同)
  • 但正如我所指出的,在 Admin 区域中有一个 AdminController 并没有真正的意义
  • 这是一个很好的观点。我应该将我的控制器重命名为 HomeController 吗?

标签: c# asp.net-mvc routing asp.net-mvc-routing


【解决方案1】:

您没有为控制器指定默认值,因此除非您将其包含在 url 中,否则路由引擎无法识别您要导航到哪个控制器。您可以通过为控制器名称提供默认值来解决此问题

context.MapRoute(
    "Admin_default",
    "Admin/{controller}/{action}/{id}",
    new { controller = "Admin", action = "Index", id = UrlParameter.Optional }
);

虽然这意味着../Admin 将导航到AdminControllerIndex() 方法,但这仍然意味着如果你想导航到AdminController 中的另一个方法,你的url 需要是../Admin/Admin/AnotherMethod可能不是你想要的。

区域的目的是对控制器和方法进行逻辑分组。例如,购物车应用程序可能有一个ProductsController,用户可以导航到../Product 以显示产品列表或../Product/Details/1 以显示产品的详细信息。但是该应用程序可能需要供应商使用其他方法来创建和编辑他们的产品,因此您可以创建一个单独的Suppliers 区域,../Suppliers/Products 将导航到他们的产品列表,../Suppliers/Products/Edit/1 将允许他们更新他们产品的详细信息.

Admin 区域中有一个AdminController 并没有什么意义,如果它包含与管理任务相关的通用方法,我建议它应该是HomeController(然后路由定义将是new { controller = "Home", .. }

【讨论】:

    猜你喜欢
    • 2011-12-18
    • 2018-04-02
    • 2023-03-28
    • 1970-01-01
    • 2010-11-04
    • 1970-01-01
    • 2019-12-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多