2014-12-02 69 views
1

我正在开发在Visual Studio 2013现在使用ASP.NET MVC 5我的网站,该项目有一个是相关的,都是这样的(*代表详细信息/索引/编辑/删除)几个控制器:如何重写我的控制器URL?

Current URL     Desired URL 
/Billing/     /Billing 
/BillableItems/    /Billing/BillableItems 
/Customers     /Billing/Customers 
/Bills      /Billing/Bills 
/BilledItems     /Billing/BilledItems 

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

回答

1

两个选项:

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

  2. 使用自定义路由或属性路由。自从您使用MVC5以来,属性路由变得更加简单和内置。只需在您的控制器前加上[RoutePrefix("Billing/[ControllerName]"]即可。例如,您CustomersController

    [RoutePrefix("Billing/Customers")] 
    public class CustomersController : Controller 
    

    你当然需要启用路由属性这个工作,并应用适当的路由属性在你的控制器(S)的行动。有关更多信息,请参阅Attribute Routing in ASP.NET MVC 5

    与传统的路由你只需要设置一个路由,每个控制器:

    routes.MapRoute(
        name: "Customers", 
        url: "Billing/Customers/{action}/{id}", 
        defaults: new { controller = "Customers", action = "Index", id = UrlParameters.Optional } 
    ); 
    

    记住将这些路线之前,你的默认路由,使他们赶上第一。