在ASP.Net MVC路由中,如何路由2个看起来相同但具有不同类型的不同路径?

Joh*_*ohn 2 asp.net-mvc routes

在ASP.Net MVC中,我想要两条不同的路线:

http://mysite.com/foo/12345

http://mysite.com/foo/bar

在类Foo中,我有两个返回ActionResult的方法

public ActionResult DetailsById(int id)
{
. . . some code
}
Run Code Online (Sandbox Code Playgroud)

public ActionResult DetailsByName(string name)
{
. . . some code
}
Run Code Online (Sandbox Code Playgroud)

如何设置2个路由,以便如果参数是int,它将转到DetailsById,否则转到DetailsByName?

Lau*_*tin 12

您可以对第一条路线使用路线约束.

routes.MapRoute("DetailsById",
                "foo/{id}",
                new { controller = "foo", action = "DetailsById" },
                new { id = @"\d+" } // Parameter constraints
            );

routes.MapRoute("DetailsByName",
                "foo/{id}",
                new { controller = "foo", action = "DetailsByName" }
            );
Run Code Online (Sandbox Code Playgroud)

第一个路由只接受与正则表达式匹配的id(仅接受数字).如果它与第一条路线不匹配,它将转到第二条路线.