かなりn00bの質問をして申し訳ありませんが、私はASP.NETMVCにかなり慣れていません。私の問題は次のとおりです。
私のサイトでURLを次のように処理したいと思います。
www.mysite.com/homepage/name
上記のリンクをそのユーザーのプロファイルに移動させたい。簡単にするために、コントローラーはテストアクションを持つホームページコントローラーになります。
global.asaxルーティングは次のようになります。
routes.MapRoute(
"test",
"homepage/{name}",
new { controller = "Homepage", action = "Test" }
);
これまでのところ、コードはうまく機能しています(私はそれをテストしました、そしてそれはうまくルーティングします)。
しかし今、私が欲しい他の機能は有効にすることです:
www.mysite.com/homepage/action/id
同様に動作します。
このためのルーティングは次のようになります。
routes.MapRoute(
"Default",
"homepage/{action}/{id}",
new { controller = "Homepage", action = "Index", id = UrlParameter.Optional }
);
問題は、ユーザーがアクションの{id}を省略したい場合に何が起こるかということです。ルーティングテーブルは、アクション名が実際には{name}パラメーターであることを検出します。
アクションが存在するかどうかを最初に確認する方法はありますか?そうでない場合にのみ、別のルートのパラメーターとして使用します。
意味がありますか?そうでない場合は、さらに詳細を追加します。
ありがとう!
編集
したがって、制約regexを使用してこれを解決することができました。コントローラー内のすべてのアクションを定義する正規表現を配置しました。
routes.MapRoute(
"homepage",
"homepage/{action}/{id}",
new { controller = "Homepage", action = "Index", id = UrlParameter.Optional },
new { action = "(action1|action2|action3)" }
);
そして次のルール:
routes.MapRoute(
"feed",
"homepage/{id}",
new { controller = "Homepage", action = "Test"}
);
私は大丈夫ですが、これをスケーリングするのは難しいだけです。ここでは、すべての新しいアクションを文字列内のコントローラーに配置することを忘れないでください。これは、デバッグの悪夢の大きな始まりです。
ありがとうございました !