[英]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
将导航到AdminController
的Index()
方法,但这仍然意味着,如果要导航到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.