0

我不完全了解如何在 asp.net mvc 中使用路由。我将视图和控制器组织在 2 个主要文件夹中:前台和后台。现在我想在后台以这种方式构建 url 的操作:frontoffice/controller/action/parameters 文件夹frontoffice中的操作以经典方式:controller/action/parameter

我写了这些规则,但它们不正确

routes.MapRoute(
    name: "Backoffice",
    url: "Backoffice/{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

routes.MapRoute(
    name: "Frontoffice",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

这样,frontoffice 中的所有操作都使用“backoffice”构建 url。我该怎么做?

4

1 回答 1

0

文件夹在 ASP.NET MVC 中无关紧要。

不管你把东西放在哪个文件夹中,这与路由引擎要在哪里寻找它都不对应。

这是你如何做到的:

约定是将您的控制器放在名为Controller的文件夹中,但这只是约定,我认为它不会影响路由(尽管它可能会)。

确保您的控制器Controller附加了名称,并且继承自基本控制器类或IController. 例如:

public class MyController : Controller

其次,您的路由是针对 URL 的。

routes.MapRoute(
    "Backoffice",
    "backoffice/{controller}/{action}/{id}"

要到达那条路线,您需要两件事,这两件事都与您的目录结构无关

  • 有一个派生自Controller或实现的控制器IController
  • 适当地调用该控制器:/backoffice/home/list/1

如果您希望您的控制器基于文件夹结构,那么您可能需要使用该namespace参数,并确保您的命名空间与目录结构匹配。

您将路由更改为如下所示

routes.MapRoute(
    "backoffice",
    "backoffice/{controller}/{action}/{id}",
    new[] { "MyProject.Backoffice.Controllers" }
);

那么你的目录结构应该是:

MyProject 
  |
  - FrontOffice

  - BackOffice
    | 
    - Controllers
      |
      - MyController.cs

您的控制器的命名空间应该是:

namespace MyProject.Backoffice.Controllers
{
    public class MyController
于 2012-08-30T13:03:38.817 回答