10

次の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 のドキュメントは非常に薄いです)。GetRouteDataGetVirtualPath

だから私が知りたいのは:

  1. カスタムルートを実装せずにこれを達成する方法はありますか?
  2. そうでない場合、カスタム ルートの実装を開始するための適切なリソースを知っている人はいますか?
  3. カスタムルートの実装が必要な場合、データベースからロードする必要があると思われる情報をどのように取得しますか? サービスがルートでデータベース呼び出しを行うことは問題ありませんか (これは私には間違っているようです)、それとも MVC フレームワークによって情報をルートに渡すことができますか?
4

2 に答える 2

3

それは実際には非常に簡単です。タイトルは SEO 上の理由から実際の質問に到達する必要がないため、質問コントローラー (SO の場合) は ID (URL 内) に基づいて正しい質問をロードし、ユーザーを 301 でリダイレクトします。ステータスコード。

この動作は、任意の Web インスペクタで確認できます

ここに画像の説明を入力

于 2013-04-09T18:25:58.600 に答える
1

Javascript を使用してクライアント側で実行できます。

history.pushState({}, /* Title Here */, /* URL Here */ );

唯一の欠点は、すべてのブラウザーがサポートしているわけではないことです。

于 2013-04-09T14:20:49.430 に答える