2012-03-09 91 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();