次のstackoverflow URLに移動すると、次のhttp://stackoverflow.com/questions/15532493
ように質問のタイトルが自動的に追加されます:
http://stackoverflow.com/questions/15532493/mvc-custom-route-gives-404
つまり、質問のタイトルなしで URL をブラウザーに入力すると、自動的に追加されます。
アプリケーションで同じ結果を得るにはどうすればよいですか? (注: 質問のタイトルが表示されるページに影響しないことは承知しています)。
Users
というアクションメソッドで呼び出されるコントローラーがありDetails
ます。次のルートが定義されています。
routes.MapRoute("UserRoute",
"Users/{*domain}",
new { controller = "User", action = "Details" },
new { action = "^Details$" });
これはイントラネット アプリケーションであるため、ユーザーは Windows アカウントに対して認証されます。ドメインとユーザー名を URL に追加したいと考えています。
ビューで次のように URL を生成すると、次のようになります。
@Html.ActionLink("Model.UserName", "Details", "User", new { domain = Model.Identity.Replace("\\", "/") })
次のような URL を取得します。
ドメイン/ユーザー/ACME/jsmith
ただし、ユーザーがブラウザーのナビゲーション バーを使用して URLに移動するDomain/Users/
と、ルートと一致し、ユーザーはユーザーの詳細ページに移動します。ACME/jsmith/
この場合、URL にを追加したいと思います。
私がこれまでに行った調査では、メソッドとメソッドから派生しRouteBase
て実装することでカスタム ルート オブジェクトを実装する必要があるかもしれないことが示されていますが、どこから始めればよいかわかりません (msdn のドキュメントは非常に薄いです)。GetRouteData
GetVirtualPath
だから私が知りたいのは:
- カスタムルートを実装せずにこれを達成する方法はありますか?
- そうでない場合、カスタム ルートの実装を開始するための適切なリソースを知っている人はいますか?
- カスタムルートの実装が必要な場合、データベースからロードする必要があると思われる情報をどのように取得しますか? サービスがルートでデータベース呼び出しを行うことは問題ありませんか (これは私には間違っているようです)、それとも MVC フレームワークによって情報をルートに渡すことができますか?