我正在使用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看起来好像每个实体都有子控制器。
答案 0 :(得分:1)
两个选项:
使用区域。如果在项目中创建名为Billing
的区域,则可以将所有这些相关控制器放在该区域下,并且所有URL都将以区域名称为前缀," Billing"。
使用自定义路由或属性路由。由于您使用的是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 }
);
请记住将这些路线放在之前的默认路线上,以便先捕捉它们。