ASP.NET Url重写 - 需要用于测试用例的正则表达式

时间:2012-08-10 13:14:55

标签: c# asp.net regex url-rewriting

我需要一个ASP.NET url重写模块的正则表达式,它将满足以下测试用例?

products/                  products.aspx?Atts=&Page=
products/att1/             products.aspx?Atts=att1/&Page=
products/att1/att2/        products.aspx?Atts=att1/att2/&Page=
products/2/                products.aspx?Atts=&Page=2
products/att1/2/           products.aspx?Atts=att1/&Page=2
products/att1/att2/2/      products.aspx?Atts=att1/att2/&Page=2

有人可以帮忙吗?

2 个答案:

答案 0 :(得分:1)

我设法用两条规则来捏造这个。不像我想的那么漂亮,但你能做什么?

<rule name="ProductsPagingRule" stopProcessing="false">
  <match url="^products([a-z0-9\-/]*)(?:/([0-9]+)/)"/>
  <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
  </conditions>
  <action type="Rewrite" url="products{R:1}/?Page={R:2}" />
</rule>

<rule name="ProductsRule" stopProcessing="true">
  <match url="^products/([a-z0-9\-/]*)/" />
  <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
    <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
    <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
  </conditions>
  <action type="Rewrite" url="products.aspx?PageId={R:1}" />
</rule>

最近我提出的一条规则是:

^products(?=(?:(?:[a-z0-9\-/]*)/([0-9]+)/$)?)(.[a-z0-9\-/]*)

如果有人感到勇敢,我仍然有兴趣在一条规则中完成这项工作......

答案 1 :(得分:0)

这是一个尝试。这会强制执行尾部斜杠和非空的attx字符串。如果您不需要后者,请将([^/]+/)*替换为(.*/)?

<rule source="products/(([^/]+/)*)([0-9]*)/$"
      destination="products.aspx?Atts=$1&amp;Page=$3"/>
<rule source="products/(([^/]+/)*)$"
      destination="products.aspx?Atts=$1&amp;Page="/>

(这似乎是ASP.NET中常用的URL重写规则的样式;我相信你可以改变它们以适应你正在使用的模块。)