C# 从正则表达式读取捕获组,这些捕获组也是URL重写规则?可能的
给定如下URL重写规则:C# 从正则表达式读取捕获组,这些捕获组也是URL重写规则?可能的,c#,asp.net,regex,iis-7,url-rewriting,C#,Asp.net,Regex,Iis 7,Url Rewriting,给定如下URL重写规则: <rule name="RewriteUserFriendlyThings" stopProcessing="true"> <match url="^cat/sub-cat/(\d+)/([^/]+)/?$" /> <conditions> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /&g
<rule name="RewriteUserFriendlyThings" stopProcessing="true">
<match url="^cat/sub-cat/(\d+)/([^/]+)/?$" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
</conditions>
<action type="Rewrite" url="cat/sub-cat/detail.aspx?id={R:2}" />
</rule>
在C#代码中,我需要读出第二组模式(即我的ID)中的值,以便我的书签按钮(不要问)处理这样的动态页面。我使用的是一个在发布时做事情的CMS,我们错过了动态内容的书签
因此,我所做的是将web.config作为XML加载,并根据match
元素的URL
属性中的内容匹配当前URL。然而,我不知道如何进入这个团队。记住,这需要是通用的,因此在另一条规则中,该组可以是第三组或第一组
我有一个白名单的规则,我这样做是违反的
我尝试使用捕获组
(?\d+)
,但web.config不允许使用它们。使用命名组的想法似乎是解决规则灵活性的一个相当好的方法。我目前无权在IIS上测试重写规则,但您可能希望尝试使用替代方法命名捕获的组。也许那会过去
请尝试此替代模式,它使用单引号代替尖括号:
(?'id'\d+)
我解决这个问题的方法是使用IIS7 URL重写模块的服务器变量功能
我定义了一个新的允许的服务器变量,然后使用IIS URL重写语法
{R:2}
捕获了这样需要的值。然后,我可以使用HttpContext.Request.ServerVariables
集合访问该值。我尝试了此操作,但IIS不允许使用语法-我得到一个500错误。它在我的单元测试中运行得很好,但是没有IIS参与。所以我学会了一种新的语法:-)+1很酷,很高兴你明白了。所以这种方法不依赖于命名组,只依赖于{R:2}
变量?无论团队的位置如何(如您所述,第一组或第三组),这都有效吗?您应该将此标记为答案。是的,它更加优雅,因为我可以更改用于填充服务器变量的捕获组,例如,{R:1},{R:2},基于每个重写规则,而无需更改后端代码。