MVC3不显示动作的maproute
本文关键字:maproute 显示 MVC3 | 更新日期: 2023-09-27 17:53:45
如果我有以下MapRoute:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
我可以有一个url:
blabla.com/Home/Index/123
但是我需要创建什么样的MapRoute才能做到这一点呢?
blabla.com/Home/123
还是blabla.com/Home/DEADBEEF
?
我想它涉及到类似的东西"{controller}/{id}/{action}"
Action和id是颠倒的,也许应该有一个默认的Action。但是MapRoute如何知道哪个控制器应该被这样对待?
您可能需要这样的内容。
routes.MapRoute(
name: "DefaultRoute",
url: "Home/{action}",
defaults: new { controller = "Home", action = "Index" },
constraints: new { action = "[A-Za-z]*" }
);
或不带操作
routes.MapRoute(
name: "DefaultRoute",
url: "Home/{id}",
defaults: new { controller = "Home", action = "Index", id = "" },
constraints: new { id = "[A-Za-z]*" }
);
你需要确保路由名不同于你设置的任何其他路由,并注意路由的顺序,因为其他相似的路由可以相互覆盖。在这种情况下,确保你可能希望在默认路由之前使用这个,但要注意它会覆盖它。
对于没有控制器甚至动作,你可以设置默认值,在路由中不需要它们。
对于约束,您可以简单地将constraints参数添加到路由中,为某个属性设置正则表达式,如上所示。
编辑:这里有一些有用的链接,如果你需要更多的路由信息。
- http://www.dotnet-tricks.com/Tutorial/mvc/HXHK010113-Routing-in-Asp.Net-MVC-with-example.html
- http://weblogs.asp.net/scottgu/archive/2007/12/03/asp-net-mvc-framework-part-2-url-routing.aspx
- 高级ASP路由教程和示例
你可以这样添加路由:
routes.MapRoute(
"CustomRoute",
"Home/{id}",
new { controller = "Home", action = "Index", id = "" });
确保你把它放在默认路由之上。然而,这个路由会阻塞HomeController中的所有其他动作。因为我们对id参数没有约束,框架不可能知道你是在引用URL中的动作还是id。