Routes 如何重写控制器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都将以区域名称“计费”作为前缀 使用自定义路由或属性路由。由于您

我正在Visual Studio 2013中使用ASP.NET MVC 5开发我的网站。现在,该项目有几个相关的控制器,如下(*表示详细信息/索引/编辑/删除):

这是因为过于简单的项目模板只允许这样做。但是,由于这些项目都与计费相关,我想将它们分组为一个,这样计费控制器URL看起来就像每个实体都有子控制器一样。

两个选项:

  • 使用一个区域。如果您在项目中创建一个名为
    计费
    的区域,那么您可以将所有这些相关控制器放在该区域下,并且所有URL都将以区域名称“计费”作为前缀

  • 使用自定义路由或属性路由。由于您使用的是MVC5,所以属性路由更简单、更内置。只需在控制器前面加上
    [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 }
     );