更改控制器的路由以将其包含在另一个控制器下

时间:2014-03-25 14:19:59

标签: asp.net-mvc-4 url-routing

当我调用控制器时,我有一个名为 DummyController 的控制器,就像DummyController/Index我想要将此控制器调用为maincontroller/dummycontroller/index,其中mainController是完全不同的控制器。

DummyController的代码:

  public ActionResult Index()
            {
                return View("~/Views/main/dummy/index.cshtml",db.Users.ToList());
            }

虚拟控制器的索引文件的位置是main/dummy

现在的问题是,当我调用虚拟控制器的索引页面时,我得到的网址为dummy/index我希望网址显示为main/dummy/index

有没有办法创建子控制器? o仅为特定控制器更改URL

1 个答案:

答案 0 :(得分:0)

一旦我遇到一个简单的问题,这是相对简单的。

使用[RoutePrefix("")]&的组合[Route("")]在我的控制器上,我能够完成这项工作。属性路由需要在Global.asax.cs routes.MapMvcAttributeRoutes()方法中调用RegisterRoutes()

    [RoutePrefix("main/dummy")]
    [Route("{action=index}/{id:long?}")]
  • {action=index}定义路由的动作处理,并指定/ index作为默认动作,如果没有提供(即〜/ main / dummy /将渲染〜/ main / dummy / index
  • {id:long?}指定id路由属性
    • :long是将参数约束为long数据类型的语法
    • ?表示此参数是可选的。 (more on this here

这也可以使用标准MapRoute()技术完成:

    routes.MapRoute(
        name: "DummyControllerRoute",
        url: "main/dummy/{action}/{id}",
        defaults: new { controller = "Dummy", action = "Index", id = UrlParameter.Optional });

<小时/> 我忘了添加我的简单问题.. 我在控制器中有两个操作:Index()Index(id),它们总是会产生AmbiguousRouteException,并让我相信我的路线定义不正确。将其更改为View(id)解决了它。 (我从技术上讲,路线 是错误的,但我不需要花费更多时间试图让它以这种方式工作)