Routes 如何重写控制器URL?
我正在Visual Studio 2013中使用ASP.NET MVC 5开发我的网站。现在,该项目有几个相关的控制器,如下(*表示详细信息/索引/编辑/删除): 这是因为过于简单的项目模板只允许这样做。但是,由于这些项目都与计费相关,我想将它们分组为一个,这样计费控制器URL看起来就像每个实体都有子控制器一样。两个选项:Routes 如何重写控制器URL?,routes,asp.net-mvc-5,asp.net-mvc-routing,Routes,Asp.net Mvc 5,Asp.net Mvc Routing,我正在Visual Studio 2013中使用ASP.NET MVC 5开发我的网站。现在,该项目有几个相关的控制器,如下(*表示详细信息/索引/编辑/删除): 这是因为过于简单的项目模板只允许这样做。但是,由于这些项目都与计费相关,我想将它们分组为一个,这样计费控制器URL看起来就像每个实体都有子控制器一样。两个选项: 使用一个区域。如果您在项目中创建一个名为计费的区域,那么您可以将所有这些相关控制器放在该区域下,并且所有URL都将以区域名称“计费”作为前缀 使用自定义路由或属性路由。由于您
计费
的区域,那么您可以将所有这些相关控制器放在该区域下,并且所有URL都将以区域名称“计费”作为前缀[RoutePrefix(“Billing/[ControllerName]”]
。例如,在控制器前面加上CustomerController
:
[RoutePrefix("Billing/Customers")]
public class CustomersController : Controller
当然,您需要启用属性路由才能使其工作,并将适当的路由属性应用于控制器中的操作。有关更多信息,请参阅
使用传统路由,您只需为每个控制器设置路由:
routes.MapRoute(
name: "Customers",
url: "Billing/Customers/{action}/{id}",
defaults: new { controller = "Customers", action = "Index", id = UrlParameters.Optional }
);
记住将这些路线放在默认路线之前,以便它们最先到达 routes.MapRoute(
name: "Customers",
url: "Billing/Customers/{action}/{id}",
defaults: new { controller = "Customers", action = "Index", id = UrlParameters.Optional }
);