わかりやすい名前 URL ルート スキームを使用しています。基本的に、プリンシパル ID とフレンドリ名の組み合わせを使用して、これを内部で ID (個人 ID) にマップすることができます。したがって、次のようなルートです。
routes.MapRoute(string.Empty, "{friendlyname}/Products/{action}", new {controller = "Products", action = "List"});
次のような URL にマップします。
Adam/Products/List
これはすべて正常に機能し、同様に必要な指定された人物の内部 ID を抽象化します。
問題は、ビューが多くの部分ビューで構成されていることです。@Html.Action メソッドを使用してレンダリングされる場合、最終的には PersonID が必要ですが、URL からは「フレンドリ名」しかわかりません。
私はしばらくこれについて考えてきましたが、私の心には2つの解決策があります。
部分ビューを返す各コントローラー アクション メソッドに「フレンドリ名」を渡します。内部的に、メソッドは現在ログインしている ID とフレンドリ名を検索する必要があります。これにより、PersonID が提供され、それ以降は効率的にクエリを実行できます。このアプローチの唯一の問題は、部分ビューが複数あるため、innefficeint である部分ビュー呼び出しごとに、現在ログインしている ID とフレンドリ名を照会することになり、このコードを 1 回だけ記述する必要があることです。
何らかの方法でビューでクエリを実行し、PersonID を取得して各 @Html.Action 呼び出しに渡すことができるようにすることで、部分的なビュー コントローラー メソッドでそのルックアップを実行する必要がなくなり、同じ共有情報についてデータベースへのラウンド トリップを節約できます。これに関する問題は、アプリケーションの残りの部分で使用する DI を使用して、ビューでこのクリーンリーを行う方法がわからないことです。
へのアプローチに関する考えは大歓迎です。
ありがとうございました、
アダム