在MVC的Route开头的Id

时间:2011-02-21 20:45:39

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

我有一种情况,我想在我的应用程序中使用路由,以便应用程序的索引方法可以识别此http://www.website.com/ID

此外,http://www.website.com/Controller/Action也应该有用。

问题在于,当我设置与第一个URL对应的路由时,第二个URL的路由不起作用(即使我为此设置了单独的路由)。

请告诉我这里我做错了什么......

2 个答案:

答案 0 :(得分:2)

ID值是否具有一些区别特征,可以让您区分它和控制器名称?例如,它是数字吗?如果是这样,您可以在第一个路径上设置约束,使其仅匹配ids。这将允许其他请求通过第二个(默认)路由。

routes.MapRoute(
    "IdRoute",
    "{id}",
    new { controller = "home", action = "get" },
    new { id = "\d+" } // match ids that consist of 1 or more digits
);

routes.MapRoute(
    "Default",
    new { controller = "home", action = "index", id = UrlParameter.Optional }
);

答案 1 :(得分:0)

以下内容应该有效:

routes.MapRoute(
    "DefaultWithID",
    "{id}",
    new { controller = "Home", action = "Index" }
);

routes.MapRoute(
    "Default",
    "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);

假设:

public class HomeController : Controller
{
    public ActionResult Index(string id)
    {
        return View();
    }
}

两者:/123/Home/Index/123工作正常。