2014-12-02 66 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 } 
    ); 
    

    記住將這些路線之前,你的默認路由,使他們趕上第一。