1

我试图让路由约束与使用 REGEX 路由的路径中的 GUID 一起工作,但看不到我哪里出错了。

url 被重新路由到正确的页面,但正则表达式被完全忽略(我可以放入任何垃圾并且它匹配所有内容)。

这是代码:(注意-这不是 MVC,而是 ASP.Net 4.5 上的网络表单)

Imports System.Web.Routing
Imports Microsoft.AspNet.FriendlyUrls

Public Module RouteConfig
Sub RegisterRoutes(ByVal routes As RouteCollection)
    routes.EnableFriendlyUrls()

    Dim guidRegex As String = "^(\{){0,1}[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}(\}){0,1}$"
    routes.MapPageRoute("Redirect", "r/{lid}", "~/redirect.aspx", True, New RouteValueDictionary(New With {.lid = guidRegex}))
End Sub

End Module

我已经用其他正则表达式尝试了这种技术(示例直接从 Microsoft 站点复制),但它也不起作用。我做错了什么,但我无法弄清楚。

4

1 回答 1

2

我知道这已经是将近 2.5 年之后了,对于延迟回复您,我深表歉意……但是,我今天刚刚在 ASP.Net 4.5 网络表单中第一次尝试了路由,结果我今天偶然发现了您的答案. 因此,如果其他人(例如我下次遇到这种情况时)发现它有用,我会发布它。

您的正则表达式不起作用的原因是您缺少 Microsoft 示例中包含的内容……默认值。MapPageRoute 方法实际上包含多达六个参数:名称、URL 模式、物理文件、是否要检查文件是否存在、默认值和约束。)

在上面的示例中,您的正则表达式被应用为默认值,而不是您可能期望的约束;这让我花了大约 2.5 小时。因此,为了让您的示例正常工作,您需要添加默认值。由于您没有任何默认值,因此您可以添加 Nothing 并且它会起作用。

使用您的示例,并修改一行:

Imports System.Web.Routing
Imports Microsoft.AspNet.FriendlyUrls

Public Module RouteConfig
Sub RegisterRoutes(ByVal routes As RouteCollection)
    routes.EnableFriendlyUrls()

    Dim guidRegex As String = "^(\{){0,1}[0-9a-fA-F]{8}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{4}\-[0-9a-fA-F]{12}(\}){0,1}$"
    routes.MapPageRoute("Redirect", "r/{lid}", "~/redirect.aspx", True, Nothing, New RouteValueDictionary(New With {.lid = guidRegex}))
End Sub

End Module

因此,您的答案是......从字面上看......什么都没有。

于 2016-01-28T23:25:01.600 回答