1


2

次のスタイルのルートをマップしようとしています。http://www.twitter.com/userから実行できるのと同じ方法でhttp://site.com/username

私の最初の解決策はこれらのルートを持つことでした:

//site.com/rathboma - maps to user details for rathboma
routes.MapRoute( "Users"、 "{id}"、new {controller = "Users"、action = "Details"});

routes.MapRoute( "デフォルト"、//ルート名 "{コントローラ} / {アクション} / {ID}"、//パラメータを持つURL {コントローラ= "ホーム"、アクション= "インデックス"、ID = "日曜日" //パラメータのデフォルト)

そして、私が 'Links’コントローラで以下をやろうとするまで、それはうまく働いていました:

public ActionResult Details(string id){int newId;} if(!int.TryParse(id、out newId))は、RedirectToAction( "Index")を返します。

WebLink結果= Service.GetWebLink(newId、5);

if(results == null)は、RedirectToAction( "Index")を返します。

ビュー(結果)を返します。 }

これらのRedirectToActionメソッドは、ブラウザをhttp://site.com/Links/indexに移動するのではなく、http://site.com/Users(私はユーザーコントローラを所有しています)に戻そうとします。

なぜこれが起こっているのですか?

これを正しく機能させるためにどのようにルートを整理したらよいですか?

必要に応じて、http://site.com/linksを犠牲にしてhttp://site.com/links/indexに移動することを嬉しく思います。 しかし、どうすればそれを強制できますか?

すべての助けをありがとう

編集:

何が原因なのかはわかっています。http://site.com/links(インデックスページ)にリダイレクトしようとしていますが、リンクがユーザー名として選択され、/ users / detailsにリダイレクトされています。 user 'links’は/ usersにマップするUsersController Indexアクションにリダイレクトしようとします。そしてサイクルは継続します( 'users’は見つけることができるユーザーではないため、無限にリダイレクトされます)。

*だから私の副次的な疑問は、インデックスページに/ linksを使うのではなく、mvcが常に/ links / indexを使うようにするにはどうすればいいのかということです。

2 Answer


2


ユーザーのルートの前にこのルートを追加してみてください。

routes.MapRoute( "リンク"、 "{コントローラ} / {ID}"、新規{コントローラ= "リンク"、アクション= "詳細"});

これはそれからうまくいくはずです

&


0


Linksコントローラで `RedirectToAction(" Index ");`を `RedirectToAction(" Index "、" Links ");`に変更することで、ルートを変更しなくても問題が解決するはずです。

問題はあなたが2つの非常に欲張りなルートを持っているということです。 私がしたいのは、このように欲張りなルートにデフォルトルートを分割することです。

routes.MapRoute("Links",
                "Links/{id}",
                 new { controller = "Links", action = "Index" });


routes.MapRoute("Users",
                "{id}",
                 new { controller = "Users", action = "Details" });

routes.MapRoute("Default",
                "",
                 new { controller = "Home", action = "Index" });

URLを次のようにする

site.com/links/5  - hits the Links controller
site.com/name     - hits the Users controller
site.com/         - hits the home controller