我正在尝试使用root设置我的MVC应用程序,如下所示:
行动:public ActionResult CurrentThing(string thingID, int year)
我还需要常规控制器/动作路径才能使用和不使用id。 ThingID是一个字符串。我定义了以下路线:
routes.MapRoute(
"Regular",
"{controller}/{action}/{id}",
new { id = UrlParameter.Optional }
);
routes.MapRoute(
"RootSpecificRecord",
"{thingID}/{year}",
new { controller = "Things", action = "CurrentThing", year = DateTime.Now.Year }
);
routes.MapRoute(
"Root",
"",
new { controller = "Things", action = "Index" }
);
这一切正常,直到我转到mysite.com/id/year,此时第一条路线将id视为控制器,将年份视为动作。我该如何解决这个问题?
答案 0 :(得分:0)
路由引擎无法区分
/{controller}/{action}/{id}
和/{ThingId}/{year}
由于您的id参数是可选的,并且您没有ThingId为id的任何约束。
您可以尝试先放置RootSpecificRecord路由,然后更改Id,以便它只接受整数。这将使它比你的常规路线更具体。假设当然thingID是一个整数,你可以像这样改变你的路线:
routes.MapRoute(
"RootSpecificRecord",
"{thingID}/{year}",
new { controller = "Things", action = "CurrentThing", year = DateTime.Now.Year },
new {thingID= @".*\d+.*" }
);
如果要创建不同的约束,请参阅此blog post有关路径约束的内容。
答案 1 :(得分:0)
默认路线必须是路线表中的最后一个