ASP.NET webforms 4.5 MapPageRoute Route Constraint w/regex 不起作用

标签 asp.net regex vb.net webforms url-routing

我正在尝试使用 REGEX 获取路由约束以与路径中的 GUID 一起使用,但看不出哪里出错了。

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

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

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 站点复制的),但它也不起作用。 我做错了什么,但我无法弄清楚。

最佳答案

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

您的正则表达式不起作用的原因是您缺少 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

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

关于ASP.NET webforms 4.5 MapPageRoute Route Constraint w/regex 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19505735/

相关文章:

.net - 基数估计问题?日期时间参数与强制转换?

vb.net - 如何将加密的音频文件解密到剪贴板

javascript - javascript代码和IIS发布中的asp.net mvc url操作

java - 为什么 Pattern.compile 在 android studio 和 Java SE 中的行为不同?

javascript - .NET 正则表达式匹配来自任何语言的任何类型的字母

xml - 用于缩进 XML 文件的正则表达式

vb.net - 将图像复制到剪贴板并将其粘贴为文件(vb.net)

javascript - 复制网格中的第一行

c# - 没有从 'type1' 到 'type2' 的隐式引用转换

asp.net - 跨浏览器CSS