Asp.net mvc 4 更改控制器的路由以将其包含在另一个控制器下

Asp.net mvc 4 更改控制器的路由以将其包含在另一个控制器下,asp.net-mvc-4,url-routing,Asp.net Mvc 4,Url Routing,我有一个名为DummyController的控制器,当我调用该控制器时,它就像DummyController/Index我希望将该控制器称为maincontroller/DummyController/Index,其中maincontroller是一个完全不同的控制器 DummyController的代码: public ActionResult Index() { return View("~/Views/main/dummy/ind

我有一个名为DummyController的控制器,当我调用该控制器时,它就像
DummyController/Index
我希望将该控制器称为
maincontroller/DummyController/Index
,其中
maincontroller
是一个完全不同的控制器

DummyController的代码:

  public ActionResult Index()
            {
                return View("~/Views/main/dummy/index.cshtml",db.Users.ToList());
            }
虚拟控制器索引文件的位置为
main/Dummy

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


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

一旦我解决了一个简单问题,这就相对简单了

通过在我的控制器上使用
[RoutePrefix(“”)
[Route(“”)
的组合,我能够做到这一点。属性路由需要调用Global.asax.cs
RegisterRoutes()
方法中的
routes.mapmvcattributures()

    [RoutePrefix("main/dummy")]
    [Route("{action=index}/{id:long?}")]
  • {action=index}
    定义路由的操作处理,并将/index指定为默认操作(如果未提供该操作)(即~/main/dummy/will render ~/main/dummy/index)
  • {id:long?}
    指定id路由属性
    • :long
      是将参数约束为
      long
      数据类型的语法
    • 表示此参数是可选的。()
这也可以使用标准的
MapRoute()
技术来完成:

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

我忘了补充我的简单问题是什么。。
我在控制器中有两个操作:
Index()
Index(id)
,这总是会导致
模糊的RouteException
,并使我相信我的路由定义不正确。将其更改为
查看(id)
解决了这个问题。(我猜从技术上讲,路线是错误的,但我不需要再花更多的时间来尝试这样做)

你曾经解决过这个问题吗?没有。.客户端对更短的url很满意。.没有,如果是这样的话,更好的方法是创建一个基本控制器而不是前缀。听起来你要求的与你实际想要的不同。
MyBaseController
只允许在Controlle之间共享操作rs.
AChildController
BChildController
仍将分别通过
/AChild/
/BChild/
等URL进行访问。此外,只要
MyBaseController
不是
抽象的
,那么您就可以拥有第三个URL,如
/MyBase/
。子分类控制器不存在以不同的方式启用这样的路由。从逻辑上讲,这也没有任何意义:控制器的每个子类型是否都可以通过URL访问?即:
~/MyBase/AChild/AChildAction
~/MyBase/BChild/BChildAction
。这也会对MyBase可以包含的操作施加隐式限制。类似于此的模拟是
/。。/..
在过去的URL中,提供对客户端不应该访问的资源的意外访问。我无法编辑第一条注释,但如果不清楚的话,这是假定的:
类AChildController:MyBaseController{}
&
类BChildController:MyBaseController{}
事实上,我想要前缀和控制器的属性。这确实回答了url的问题。