0

global.asax に 2 つのルーターがあり、1 つは次のようなデフォルト ルーターです。

routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", 
                new { controller = "Test", action = "Action1", id = UrlParameter.Optional } 
            );

もう 1 つはカスタム ルーターです。

routes.MapRoute(
        "CustomRouter", // Route name
        "Test/{id}/{FacetString}/{CurrPageNo}", 
        new { controller = "Test", action = "Action12", id = "", FacetString = UrlParameter.Optional, CurrPageNo=UrlParameter.Optional }           

);

URL「http://localhost/Test/1001/State=TX」を渡すと、2番目のルーターが実行されるはずですが、実行されない方法もあります。ルーターのシーケンスが重要であることを読んだので、そこでシーケンスを交換しようとしましたが、それでも機能しません。デフォルトルーターの上に配置すると、そのルーターの他のすべてのアクションに対してカスタムルーターが呼び出されます。起こるべきではない

4

3 に答える 3

0

制約を使用して、カスタムルーターの一致率を下げる必要があるようです。4番目のパラメーターを使用して、制約を定義できます。この場合、次のようになります。

    routes.MapRoute(
    "CustomRouter", // Route name
    "Test/{id}/{FacetString}/{CurrPageNo}", 
    new { controller = "Test", action = "Action12", id = "", FacetString =    UrlParameter.Optional, CurrPageNo=UrlParameter.Optional
 , new {id=@"\d+"});

このように、2番目のURLセクションは、実行されるために数値である必要があります。

于 2012-05-09T11:18:16.910 に答える
0

2 番目のルートによると、URL は次のいずれかの形式である必要があります

http://localhost/Test/1001

http://localhost/Test/1001/State

http://localhost/Test/1001/State/3

controller = "Test", action = "Action12"また、2 番目のルート定義の一部ではないため、必要ありません。

ASP.NETルーティングに関するこのMSDNリンクをご覧ください

于 2012-05-09T10:51:58.480 に答える
0

最後の URL コンポーネントState=TXは、クエリ文字列パラメーターのように見えます。そうではありませんか?State=TX(それはあなたのルートと一致しません)または/State/TX

于 2012-05-09T10:53:04.803 に答える