MVC路由:尝试使动态根值工作

时间:2011-06-18 18:31:29

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

我正在尝试使用网站的根网址定义网站的动态部分。我在为它定义正确的MVC路线时遇到了一些麻烦。有人可以帮忙。

我想要的网址如下所示: http://website.com/ [dynamic-string]

但我有其他标准网页,例如:http://website.com/abouthttp://website.com/faq,或者只是http://website.com

我的路线无法正常使用该动态字符串。如下图所示。

这是动态字符串的路径。

    routes.MapRoute(
    "CommunityName", // Route name
    "{communityName}", // URL with parameters
    new { controller = "Community", action = "Community", communityName = UrlParameter.Optional }
  );

这是所有其他 STANDARD PAGES

的路线
 routes.MapRoute(
 "Default", // Route name
 "{action}", // URL with parameters
 new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
 );

我的路线不匹配。根据首先申报的路线,一切都会转移到一条或另一条路线。

2 个答案:

答案 0 :(得分:1)

您提到的两条路线没有区别。 MVC如何知道应该将哪个url映射到communityName以及要执行哪些操作?任何网址都可以匹配。

您可以将标准页面定义为路径(在CommunityName路线之前),或者您可以在社区操作中捕获它们,查看名称是否与您的主页控制器中的功能匹配,然后调用正确的操作功能。

我之前从未这样做过,但你可以创建一个更智能的路径处理程序来查看你的控制器动作,检查动作是否真的存在,如果是,则选择该路径。

答案 1 :(得分:1)

这是因为路线实际上是一样的。当您声明操作路线时,您没有对路线说明任何约束,因此将假定任何内容都是操作名称。

如果您希望在同一级别捕获两条路线,则必须将操作名称限制为控制器上存在的路径,这样如果不匹配则会传递到下一条路线。

您可以在此处查看示例和高级约束:

http://blogs.planetcloud.co.uk/mygreatdiscovery/post/Custom-route-constraint-to-validate-against-a-list.aspx