2012-03-09 88 views
0

這是我們的重寫規則:Urlrewriter.net匹配規則將返回到多

<rewrite url="/Product/(.+)/" to="~/ProductDetails?ProductID=$1" /> 

和它

www.website.com/product/34/nice-red-jacket 

然後我們得到ProductID=34

工作正常,但它一旦失敗在url中有另一個正斜槓

www.website.com/product/34/nice-red-jacket/special-edition/buy-now/ 

ProductID=34%2fnice-red-jacket%2fspecial-edition%2fbuy-now

我們需要更改我們的重寫規則以停止第一個/下一個斜槓處的匹配,但我們該怎麼做?

回答

1

嘗試此表達

^/Product/(\d+)/?.*$ 

<rewrite url="^/Product/(\d+)/?.*$" to="~/ProductDetails?ProductID=$1" /> 

第一組(\d+)表示匹配的至少一個位,它代表了ID,可以遵循或不被/,然後通過任何字符。 ^ and $標誌着比賽的開始和結束。

這裏一些測試數據

var reg = new Regex(@"^/Product/(\d+)/?.*$"); 

var urls = new [] 
    { 
     "/Product/1", 
     "/Product/2/23/asd", 
     "/Product/3/21334/asd/", 
     "/Product/5/32/asd/asd",   
    }; 

urls.Select(url=> reg.Replace(url,"~/ProductDetails?ProductID=${1}")) 
    .Dump();