如何将所有内容重定向到单个控制器?

时间:2011-09-23 04:40:17

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

我有三条具体路线:

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

    routes.MapRoute(
       "Admin Section",
       "AdminSection/{action}/{id}",
       new { controller = "AdminSection", action = "Index", id = UrlParameter.Optional }
       );

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

基本上,前两个路由按计划工作,但是,我希望路由中不是特定的所有路由都被重定向到listings控制器。

我对路由仍然很陌生并且在过去的几个小时里一直试图谷歌没有运气 - 我确切地知道这里发生了什么,但是,我不知道如何解决它。

我已经使用了RouteDebugger,我可以看到它正在击中路线,但问题是如果没有指定控制器它只会进入Listings控制器 - 但是,显然总会有是那里的东西。

我尝试过几种不同的组合 - 我认为通过删除网址的{controller}部分并仍然定义默认值来获胜,但是,我没有太多运气。

有谁知道我需要做什么?

3 个答案:

答案 0 :(得分:4)

这个怎么样:

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

site.com/test:

它会转到action: testcontroller: listingid = blank

enter image description here

答案 1 :(得分:3)

编辑:根据我的理解,你想要一个全能的路线。

http://richarddingwall.name/2008/08/09/three-common-aspnet-mvc-url-routing-issues/

routes.MapRoute("Listings", "{*url}",
    new { controller = "Listings", action = "Index" }
);

原件:

我现在无法测试,但

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

这应该有用。

在您的Listings控制器中,只需接受一个字符串参数“anythingOtherThanController”,它就会绑定到它。

这里的主要问题是/ some / action将映射到与/ another / action相同的操作。所以我不确定你在这里要做什么:)

答案 2 :(得分:1)

提供默认路由并提供控制器名称作为列表控制器。将此路由映射保留在所有映射的底部。

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

抱歉,我的序列混合了。