2

最近、特別なルーティング ルールが必要です: {*whatever}/details/{Id}/{itemName}

アプリケーションを実行すると例外がスローされることはわかっています。たとえば、私のアプリケーションでは、URL パターンは www.domain.com/root/parent/child/.../child/details/30/itemname です。

しかし、現在のルーティングはこれをサポートしていません。ルーティング ハンドラをカスタマイズして動作させるにはどうすればよいですか?

4

3 に答える 3

2

これをサポートするクラスが作成されました

URLのどこにでもキャッチオールセグメントを処理できるようなクラスを作成しました。かなりのコードがありますが、期待どおりに機能し、実際のプロジェクトで使用しました。

自分でチェックして、ニーズを満たしているかどうかを確認してください。

于 2011-01-12T11:35:11.717 に答える
1

System.Web.Routing.RouteBase クラスの拡張を検討して、GetRouteData() メソッドをオーバーライドすることをお勧めします。これを使用して、要求された URL を見て、パターンに一致するかどうかを判断し、一致する場合は、要求を処理するコントローラーとアクションを指す RouteData の新しいインスタンスを構築して返すことができます。要求された URL と一致しない場合は、null を返します。

例については、次を参照してください。

Pro ASP.NET MVC フレームワーク Steve Sanderson 著

カスタム RouteBase

于 2009-06-06T21:18:37.310 に答える
1

問題は...どのように停止するかを知ることです?

{*whatever} セグメントが一致します。

/foo/
/foo/bar
/foo/bar/details/4/moreFoo
/foo/bar/andmore/details/4/moreFoo

キャッチオール パラメーターには何でも含まれているため、停止することはありません。

これを実装する唯一の方法は、詳細を使用する場所ごとに異なるルートを作成することです...

例えば:

games/details/{id}/{itemName}
widgets/details/{id}/{itemName}
books/details/{id}/{itemName}

もちろん、それはデフォルトの {controller}/{action}/{id} ルートですでに提供されています

于 2009-06-05T21:53:59.883 に答える