2009-06-03 18 views
1

は私がC1またはC2があるとき、私は問題に実行するただし、次のASP.NETルーティングと正規表現

route = new Route("{w1}-{c1}-{n1},{w2}-{c2}-{n2}", new ResultRouteHandler()); 
route.Constraints = new RouteValueDictionary(); 
route.Constraints.Add("c1", "(.*)|([-])"); 
route.Constraints.Add("c2", "(.*)|([-])"); 
RouteTable.Routes.Add(route); 

のようなルートを有効にしようとしています。例えば、 "a-b-c、d --- f"は404を返します( "a-b-c、d-e-f"は正常です)。誰でも私が間違っていることを知っている?前もって感謝します。 c2がある場合

route = new Route("{w1}-{c1}-{n1},{w2}---{n2}", new MyRouteHandler()); 
RouteTable.Routes.Add(route); 
route = new Route("{w1}-{c1}-{n1},{w2}-{c2}-{n2}", new MyRouteHandler()); 
RouteTable.Routes.Add(route); 

" - " 我々はそれ以外の場合は第二に、最初のルートに一致:

EDIT:

私はこの問題の簡単な回避策を見つけました。

答えて

1

、あなたはが理由です"a-b-c,d---f"をマッチさせたいん最初に制約を微調整しています。あなたが持っている正規表現は冗長ですが、'-''.*'と一致します。言い換えれば、私はあなたのRegexがルーティングエンジンのパーサーではなく責任を負うとは思わない。

"{w1}-{c1}-{n1},{w2}-{c2}-{n2}"から"{w1}-{c1}-{n1},{w2}_{c2}-{n2}"へのルートを変更すると、が"a-b-c,d_--f"に一致するようになります。私は、ルートの解析について、デリミタを次の値として使用することを好まないと考えています。

あなたは制約を(現在存在するように)削除することができますが、'-'c1またはc2にしたい場合は、URLを少し違った方法で整理する必要があります。

+0

はい、正規表現が解析される方法のため、単一のルートでルールを作成することはできないようです。私は2つのルートを持つことで問題を回避しました。 – niaher

0

私は正規表現の実装は約100%陽性ないんだけど、それは私が考える次のようになります。私が正しく理解していた場合

route.Constraints.Add("c1", "([^-]*)"); 
route.Constraints.Add("c2", "([^-]*)");