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

时间:2009-07-03 18:31:44

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

我想创建如下的路由规则:

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

传递的变量应该是项目#(35),搜索#(89)和编辑#(48)

有人可以帮我构建一个routes.MapRout()。

我想用:

routes.MapRoute(
            "Default",
            "{controller}/{projectid}/search/{searchid}/{action}/{actionid}",
            new { controller = "Home", action = "Edit", projectid = "", actionid = "" }
        );

但是从以前的经验来看,这种类型的MapRoute会失败......我只能使用以下格式的东西来工作:

{controller}/{action}/{variable}

有人可以就此提出任何建议吗?感谢。

3 个答案:

答案 0 :(得分:1)

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

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

这会让你更简单。

答案 1 :(得分:0)

使用ASP.NET MVC对控制器进行分组

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

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

虽然ASP.NET MVC中没有开箱即用的支持,但可扩展性模型允许构建非常接近的东西。

注册路线

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

routes.MapAreas( “{控制器} / {行动} /(编号)”,     “AreasDemo”     new [] {“Blogs”,“论坛”});

routes.MapRootArea( “{控制器} / {行动} /(编号)”,     “AreasDemo”     new {controller =“Home”,action =“Index”,id =“”}); MapAreas方法的第一个参数是您熟悉和喜爱的路由URL模式。我们将在该URL之前添加一个区域。第二个参数是根命名空间。按照惯例,我们将“.Areas.AreaName.Controllers”附加到提供的根命名空间,并将其用作查找控制器类型的命名空间。

http://haacked.com/archive/2008/11/04/areas-in-aspnetmvc.aspx

答案 2 :(得分:0)

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

@Robert Harvey - 以Basecamp为例 - 他们在URI中使用了非常类似的方法。我认为这比你的建议更清洁,更好。一旦你掌握了路由,它甚至都不是“更简单”。