处理具有可变段数并在路由映射中包含关键字文本的 URL

问题描述

我正在编写下面的代码来映​​射 URL 的路由,该 URL 在我的 asp.net MVC 应用程序的 URL 中的任何位置都有一个名为“Listing-Filter”的关键字,如下所示 -

routes.MapRoute(
              name: "Core_ListingPage",url: "{pageUrl}",defaults: new {controller = "ListingPage",action = "Page" },constraints: new { pageUrl = @"^(.listing-filter.)?$" }
                      ).DataTokens.Add("area","community");

它没有用,所以我怀疑我的 Regex 表达式并将其替换为如下所示的完整页面 URL,只是为了检查约束是否有效 -

routes.MapRoute(
              name: "Core_ListingPage",constraints: new { pageUrl = /home/items/kichen/listing-filter/price-range-25-to-100/price-range-100-to-200" }
                      ).DataTokens.Add("area","community");

但它也不起作用,我的结论是 URL 或约束参数有问题。有人可以帮我吗。

注意 - 以下是我想要实现此路由代码内容,任何不同的方法也将不胜感激。

任何包含“listing-filter”文本的段数可变的 URL 都应该由这个路由映射处理。

非常感谢。

解决方法

您的正则表达式需要更改以匹配整个 URL。这应该有效:

@"^.+listing-filter.+$"

+ 后面的 . 将匹配一个或多个任意字符,而不是像您原来那样只匹配一个字符。

另外,我去掉了捕获组 () 和零或一个 ? 修饰符,因为它们不是必需的。