繁体   English   中英

Area中控制器的URL太长,如何缩短URL?

[英]Controller's URL in Area is too long, how to shorten URL?

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

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 }
    );
}

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

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

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

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

Admin区域中放置AdminController并没有多大意义,我建议如果它包含与管理任务相关联的常规方法,则应使用HomeController (然后路由定义将是new { controller = "Home", .. }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM