MVC3路由中的可选参数

问题描述

| 我正在尝试创建可以应用1和2类型URL的路由。 1-第一条路线将在应用程序的开始,我想要2种可用于访问索引页面的URL。当我最后有带有Home的URL而不是输入2时,我无法打到下面的路线。
http://www.example.com Or http://www.example.com/Home

routes.MapRoute(
               \"Default\",\"{controller}/{action}\",new { controller = \"Home\",action = \"Index\",name = \"\" }
           );
2-这种类型的URL传递\“ Name \”参数以从DB加载内容。我想要这个网址 http://www.example.com/Page?name=联系或 http://www.example.com/Page?name=Contact&id=22 但是我想要上面的URL像 http://www.example.com/Contact或http://www.example.com/About 要么 http://www.example.com/Contact/22或http://www.example.com/About/33 哪里 Contact和About是URL中传递的\“ Name \”参数的值。以下是使用的路线
 routes.MapRoute(
                \"DynamicPages\",\"{name}\",action = \"Page\" }
            );
    

解决方法

这是一个可能的解决方案。我不确定这是否是正确的方法。
public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute(\"{resource}.axd/{*pathInfo}\");

    //To match http://www.mysite.com
    routes.MapRoute(
        \"RootUrl\",\"\",new { controller = \"Home\",action = \"Index\",id = UrlParameter.Optional }
    );

    //To match http://www.mysite.com/Home
    routes.MapRoute(
        \"RootUrlWithAction\",\"Home/{action}\",action = \"Index\" }
    );

    //To match http://www.mysite.com/Contact Or 
    //      http://www.mysite.com/About Or
    //      http://www.mysite.com/Contact/22 Or
    //      http://www.mysite.com/About/33
    routes.MapRoute(
        \"DynamicPages\",\"{name}/{id}\",action = \"Page\",id = UrlParameter.Optional }
    );

    // Everything else
    routes.MapRoute(
        \"Default\",\"{controller}/{action}/{id}\",id = UrlParameter.Optional } // Parameter defaults
    );
}
测试了以下路线。这里的站点根URL是http:// localhost:5879 /。对于下面提到的每种情况,请参考下面提供的输出屏幕截图。 http:// localhost:5879 /->使用第一个路线图 http:// localhost:5879 / Home->使用第二条路线图 http:// localhost:5879 / Contact->使用第三条路线图 http:// localhost:5879 / About / 33->使用第三条路线图 http:// localhost:5879 / Home / Page?name = Contact&id = 22->使用第三条路线图 http:// localhost:5879 / Home / Index / 2->使用第四条路线图 屏幕截图1: 屏幕截图2: 屏幕截图3: 屏幕截图4: 屏幕截图5: 屏幕截图6: 希望能给您一些解决问题的想法。