Asp.net 自定义路由规则(例如www.app.com/project/35/search/89/edit/89)

Asp.net 自定义路由规则(例如www.app.com/project/35/search/89/edit/89),asp.net,asp.net-mvc,asp.net-mvc-routing,Asp.net,Asp.net Mvc,Asp.net Mvc Routing,我想创建如下路由规则: www.app.com/project/35/search/89/edit/48--->在项目控制器中编辑操作 传递的变量应该是project#(35)、search#(89)和edit#(48) 有人能帮我为此构造一个routes.MapRout()吗 我想使用: routes.MapRoute( "Default", "{controller}/{projectid}/search/{searchid}/{action}

我想创建如下路由规则:

www.app.com/project/35/search/89/edit/48--->在项目控制器中编辑操作

传递的变量应该是project#(35)、search#(89)和edit#(48)

有人能帮我为此构造一个routes.MapRout()吗

我想使用:

routes.MapRoute(
            "Default",
            "{controller}/{projectid}/search/{searchid}/{action}/{actionid}",
            new { controller = "Home", action = "Edit", projectid = "", actionid = "" }
        );
但根据以前的经验,这种类型的地图路线将失败。。。我只得到了以下格式的东西:

{controller}/{action}/{variable}
有人能给我一些建议吗?谢谢。

使用ASP.NET MVC对控制器进行分组 经常出现的一个问题是,在使用ASP.NET MVC构建大型应用程序时,如何对控制器进行分组。通常,问题是ASP.NET MVC是否支持“区域”,这是Monorail的一个特性。根据单轨文件

MonoRail支持区域的概念,区域是控制器的逻辑组。所有控制器都属于一个区域。默认区域为空(未命名)区域

虽然ASP.NET MVC中没有现成的支持,但扩展性模型允许构建非常接近的东西

登记路线 我们要做的第一件事是调用我编写的两个新扩展方法来注册这些区域的路由。此调用是在Global.asax.cs中的RegisterRoutes方法中进行的

routes.MapAreas(“{controller}/{action}/{id}”, “区域数据”, 新[]{“博客”、“论坛”})

routes.MapRootArea(“{controller}/{action}/{id}”, “区域数据”, 新的{controller=“Home”,action=“Index”,id=”“});MapAres方法的第一个参数是您知道并喜欢的路由URL模式。我们将在该URL前添加一个区域。第二个参数是根命名空间。按照约定,我们将把“.Areas.AreaName.Controllers”附加到提供的根命名空间中,并将其用作查找控制器类型的命名空间


老实说,听起来你需要让你的URL看起来像这样:

www.app.com/project/35?search=89&edit=48&flag=63 

这将使您的操作更加简单。

为什么这种格式不适合您?你说的“失败”是什么意思?如果不起作用,请尝试将新的MapRoute置于默认命令之上-Routes集合以FIFO方式工作


@Robert Harvey——以Basecamp为例——他们在URI中使用了非常类似的方法。我认为这是一个比你建议的更干净、更好的方法。一旦掌握了布线的诀窍,它就不再“简单”了。

这只是部分解决了问题。添加命名空间会将控制器从项目移动到搜索。但是我仍然需要在URL中进行编辑。此外,在某些情况下,URL中甚至会有其他元素(例如www.app.com/project/35/search/89/edit/48/flag/63)