我正在寻找缩短从DB获取一些URL的方法。我有Homecontroller和writing
动作,它向DB添加行,每个行都有UID。还有search
动作,它可以在DB中找到记录并呈现视图。
所以我使用localhost/Home/writing
添加记录,localhost/Home/search/3456
按UID搜索记录。
有没有办法将UID(3456)传递给控制器的动作跳过动作的名称,所以要搜索一个resord我可以使用localhost/Home/3456
甚至localhost/3456
?
我试过
routes.MapRoute(
"default-action",
"{controller}/{id}",
new { action = "search", id = UrlParameter.Optional }
);
和
routes.MapRoute(
"default-action",
"{id}",
new {controller = "Home", action = "search", id = UrlParameter.Optional }
);
但一无所获。
答案 0 :(得分:0)
您可以尝试使用路线约束:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Search",
"{id}",
new { controller = "Home", action = "Search" },
new { id = @"\d+" }
);
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
现在:
localhost/Home/writing
会点击Writing
HomeController
操作
localhost/3456
将点击Search
上的HomeController
操作并将其id=3456
作为参数传递我们为{id}
路由令牌定义的数字约束是必需的,以便路由引擎消除搜索和默认路由模式之间的歧义(因为动作名称不能以数字开头)。它假定您的标识符是数字。