【问题标题】:How can I rewrite my controller URL?如何重写我的控制器 URL?
【发布时间】:2015-01-31 05:26:53
【问题描述】:

我正在使用 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 看起来就好像每个实体都有子控制器。

【问题讨论】:

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


    【解决方案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 }
       );
      

      请记住将这些路线放置在您的默认路线之前,以便它们首先赶上。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-27
      • 1970-01-01
      • 2021-11-26
      • 2020-12-21
      • 1970-01-01
      • 1970-01-01
      • 2011-03-19
      • 2011-10-03
      相关资源
      最近更新 更多