c# - 从 Regex 读取捕获组也是 URL 重写规则?可能的?

标签 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" />
          <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 并根据 url 中的内容匹配当前 URL。 match 的属性元素。但是,我不知道如何进入该组。请记住,这需要是通用的,因此在另一条规则中,该组可以是第三组或第一组。

我有一个白名单规则,我这样做是违反的。

我尝试使用捕获组 (?<id>\d+)但 web.config 不允许它们。

最佳答案

我解决这个问题的方法是使用 IIS 7 URL 重写模块的服务器变量功能。

我定义了一个新的允许的服务器变量,然后使用 IIS URL 重写语法 {R:2} 捕获我需要的值。然后我可以使用 HttpContext.Request.ServerVariables 集合访问该值。

关于c# - 从 Regex 读取捕获组也是 URL 重写规则?可能的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8449597/

相关文章:

c# - 读取和写入剪贴板

c# - 我可以在适用于 Windows 8 的 WinRT Metro Style 应用程序上使用我现有的 .Net 4.0 类库吗

c# - 简单的 ftp 下载器/http 代理

asp.net - 解决 Windows Server 2016 上 ASP.NET 的 403.14 错误

java - 如何在常用词过滤器的java正则表达式中添加词列表

c# - SqlCommand 超时,即使在 SQL Studio 中相同的查询很快

c# - 使用 DataContractJsonSerializer 对 JSON 对象进行部分反序列化

asp.net - 将数据从 Controller 传递到 View 并返回到 Controller

regex - 如何匹配单行字符串上最后一次出现的模式

java - 正则表达式需要包含1个单词