我正在尝试使用网站的根网址定义网站的动态部分。我在为它定义正确的MVC路线时遇到了一些麻烦。有人可以帮忙。
我想要的网址如下所示: http://website.com/ [dynamic-string]
但我有其他标准网页,例如:http://website.com/about或http://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
);
我的路线不匹配。根据首先申报的路线,一切都会转移到一条或另一条路线。
答案 0 :(得分:1)
您提到的两条路线没有区别。 MVC如何知道应该将哪个url映射到communityName以及要执行哪些操作?任何网址都可以匹配。
您可以将标准页面定义为路径(在CommunityName路线之前),或者您可以在社区操作中捕获它们,查看名称是否与您的主页控制器中的功能匹配,然后调用正确的操作功能。
我之前从未这样做过,但你可以创建一个更智能的路径处理程序来查看你的控制器动作,检查动作是否真的存在,如果是,则选择该路径。
答案 1 :(得分:1)
这是因为路线实际上是一样的。当您声明操作路线时,您没有对路线说明任何约束,因此将假定任何内容都是操作名称。
如果您希望在同一级别捕获两条路线,则必须将操作名称限制为控制器上存在的路径,这样如果不匹配则会传递到下一条路线。
您可以在此处查看示例和高级约束: