如何重写我的控制器URL?

时间:2014-12-02 20:29:44

标签: routes asp.net-mvc-5 asp.net-mvc-routing

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

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

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

1 个答案:

答案 0 :(得分:1)

两个选项:

  1. 使用区域。如果在项目中创建名为Billing的区域,则可以将所有这些相关控制器放在该区域下,并且所有URL都将以区域名称为前缀," Billing"。

  2. 使用自定义路由或属性路由。由于您使用的是MVC5,因此属性路由更加容易和内置。只需在控制器前加上[RoutePrefix("Billing/[ControllerName]"]。例如,使用CustomersController

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

    您当然需要为此启用属性路由,并将适当的路由属性应用于控制器中的操作。有关详细信息,请参阅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 }
     );
    

    请记住将这些路线放在之前的默认路线上,以便先捕捉它们。