2012-08-10 66 views
0

我需要一個ASP.NET URL重寫模塊的正則表達式來滿足以下測試用例嗎?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 

任何人都可以幫忙嗎?

+0

一對夫婦的我忘了提及的東西.... 1)它必須執行最後的斜線。 2)url結構中可以有任意數量的「attx /」文件夾。 – 2012-08-10 13:22:12

+1

你會付多少錢爲你做這件事,因爲這似乎是你要找的東西? – 2012-08-10 13:52:18

+0

http://whathaveyoutried.com/ – hometoast 2012-08-10 14:52:43

回答

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\-/]*) 

我仍然有興趣看到在一個單一的規則完成這件事,如果任何人的心情勇敢......

+0

你的regexp引擎中有沒有非貪婪的匹配,你可以使用未定義的捕獲而不會出錯?如果是這樣,'^ products /((?:[a-z0-9 - ] + /)*?)(?:([0-9] *)/)?$'可能適合您。此外,您的解決方案不符合您自己的規範... – LHMathies 2012-08-11 19:14:34

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="/> 

(這似乎是URL重寫ASP.NET中常用規則的風格,我相信你可以改變它們以適應您使用的模塊)。