Asp.net mvc MVC路由:尝试使动态根值正常工作

Asp.net mvc MVC路由:尝试使动态根值正常工作,asp.net-mvc,asp.net-mvc-routing,Asp.net Mvc,Asp.net Mvc Routing,我试图用网站的根url定义网站的动态部分。我很难为它定义正确的MVC路线。有人能帮忙吗 我想要的url如下所示:http://website.com/[动态字符串] 但我还有其他标准页面,比如:或者甚至只是 我的路线无法正确使用该动态字符串。如下图所示 这是动态字符串的路径 routes.MapRoute( "CommunityName", // Route name "{communityName}", // URL with parameters new {

我试图用网站的根url定义网站的动态部分。我很难为它定义正确的MVC路线。有人能帮忙吗

我想要的url如下所示:http://website.com/[动态字符串]

但我还有其他标准页面,比如:或者甚至只是

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

这是动态字符串的路径

    routes.MapRoute(
    "CommunityName", // Route name
    "{communityName}", // URL with parameters
    new { controller = "Community", action = "Community", communityName = UrlParameter.Optional }
  );
这是所有其他标准页面的路径

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

我的路线就是不匹配。根据首先声明的路线,所有东西都会被转移到一条或另一条路线。

您提到的两条路线之间没有区别。MVC如何知道哪个url应该映射到communityName,哪个url应该被映射到action?任何url都可以同时匹配两者

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


我以前从未这样做过,但您可以创建一个更智能的routehandler,它可以查看控制器的操作,检查操作是否确实存在,以及是否为true选择该路由。

这是因为路由实际上是相同的。声明操作路由时,不会对路由声明任何约束,因此,将假定任何内容都是操作名称的一部分

如果希望在同一级别捕获两个路由,则必须将操作名称约束为控制器上存在的名称,这样,如果不匹配,将传递到下一个路由

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