この質問に非常によく似たものを、いくつかの機能強化を加えて実現したいと思います。
ASP.NETMVCWebアプリケーションがあります。
私は実体の木を持っています。
たとえば、Page
タイプがであるChildrenというプロパティを持つクラスIList<Page>
。Page
(クラスのインスタンスは、データベースの行に対応します。)
サイトの所有者はいつでも新しいページを追加したり、既存のページを削除したりできます。URLにはそれらの変更も反映されている必要があります。
データベース内のすべてに一意のURLを割り当てたいと思いPage
ます。と呼ばれるコントローラーでオブジェクト
を処理します。Page
PageController
URLの例:
http://mysite.com/Page1/
http://mysite.com/Page1/SubPage/
http://mysite.com/Page/ChildPage/GrandChildPage/
あなたは絵を手に入れます。したがって、すべてのオブジェクトに、親のURLに独自の名前を加えたものに等しい独自のURLを持たせ
たいと思います。
それに加えて、シングルを(ルート)URLにマップする機能も必要です。Page
Page
/
これらのルールを適用したいと思います。
- URLを他のルートで処理できる場合、またはファイルシステムに指定されたURLでファイルが存在する場合は、デフォルトのURLマッピングを実行します。
- URLを仮想パスプロバイダーで処理できる場合は、それを処理させます
- 他にない場合は、他のURLを
PageController
クラスにマップします
私もこの質問、そしてこれとこれも見つけましたが、最初の2つのポイントについて説明していないので、あまり役に立ちませんでした。
私は次の可能な解決策を見ます:
- 各ページのルートを個別にマッピングします。
これには、アプリケーションの起動時にツリー全体を調べ、完全一致ルートをルートテーブルの最後に追加する必要があります。 - ルートを追加してそれを処理
{*path}
するカスタムIRouteHandler
を作成することはできますが、このハンドラーがすべてを処理するため、最初の2つのルールをどのように処理できるかわかりません。
これまでのところ、最初の解決策は最も単純であるため、正しい解決策のようです。PageController
しかし、それでも、その場合でも、リクエストを処理する方法がわかりません。
よろしくお願いします。
前もって感謝します!
編集:私は今、私が受け取ったすべての答えのすべての側面を調べる時間がありました。私はニールの答えを受け入れました。彼は物事がどのように機能するかについて最も良い説明を提供する人だからです。他のすべての回答も良いアイデアを提供するので、私は賛成しました。