我正在尝试获取路由约束以使用路径中的GUID来使用REGEX路由,并且无法查看我出错的位置。
url被重新路由到正确的页面,但正则表达式被完全忽略(我可以放入任何垃圾并且它匹配所有内容)。
这是代码:(注意 - 这不是MVC,而是ASP.Net 4.5上的webforms)
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站点复制),它也不起作用。 有些事情我做错了,但我无法理解。
答案 0 :(得分: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
因此,你的回答是......字面上......没什么。