【发布时间】:2019-09-02 18:44:29
【问题描述】:
我的应用程序按位置执行项目搜索。 我有一些自定义路由和重定向规则来为用户提供一个友好的 URL,但我只是注意到其中一些有奇怪的行为。
我的路线定义如下:
routes.MapRoute("searchRoute", "search/in-{location}", new { controller = "search", action = "index" });
以下搜索效果很好:
- /搜索/在墨尔本
- /search/in-western-australia
- /search/in-sydney-NSW
- /search/in-perth-WA-6000
- /search/in-brisbane-CBD
- /search/in-australian-capital-territory-act
我在这里使用的复杂模式是“search/in-{location}”。我还通过用“-”替换任何空白字符来格式化位置,并在其他地方进行一些重定向(但在这里不相关).. 当搜索 URL 的位置包含“in-”时会出现问题:
例如,网址 /search/in-darwin-city 或 /search/in-testin-test 与我的 searchRoute 不匹配(我使用 RouteDebugger确认它,甚至在没有运气的情况下测试了“in-”以外的其他关键字)。
复杂段(例如 [Route("/x{token}y")])由 以非贪婪的方式从右到左匹配文字。
我查看了代码 (https://github.com/aspnet/AspNetCore/blob/release/2.2/src/Http/Routing/src/Patterns/RoutePatternMatcher.cs#L293),但仍然不确定为什么会发生这种情况,最重要的是如何解决。
任何帮助将不胜感激
【问题讨论】:
-
你的标签是
ASP.Net MVC,但你的文档链接是ASP.Net Core MVC。你是.Net Core还是.Net Framework? -
我在两个不同的应用程序中都使用了相同的问题。我不相信 .NET 版本(4.5 或 Core 2.2)是相关的,因为路由引擎似乎是相同的。
-
不确定路由引擎,但一般
ASP.Net Core MVC是ASP.Net MVC的几乎完全重写的版本 - 不应期望它们的行为相同。另外,“你在使用 .Net Core 还是 .Net Framework?” 我的意思是“你使用的是ASP.Net Core MVC还是经典的ASP.Net MVC?”,抱歉误导? -
您也可以尝试使用
"search/in-{*location}"(这应该使它变得贪婪),但我不确定它将如何处理 /search/in-testin-test/something?query =数据
标签: c# regex asp.net-mvc url-routing