私は以下のように設定したルートがあります。MVCルーティング制約
context.MapRoute(
name: "Area",
url: "Area/{controller}/{action}",
defaults: new
{
controller = "Home",
action = "Dashboard"
}
);
context.MapRoute(
name: "AccountArea",
url: "Area/{accountFriendlyId}/{controller}/{action}",
defaults: new
{
controller = "Home",
action = "Dashboard",
accountFriendlyId = RouteParameter.Optional
}
);
context.MapRoute(
name: "AccountCampaignArea",
url: "Area/{accountFriendlyId}/{campaignFriendlyId}/{controller}/{action}",
defaults: new
{
controller = "Home",
action = "Dashboard",
accountFriendlyId = RouteParameter.Optional,
campaignFriendlyId = RouteParameter.Optional
}
);
をそして私はArea/friendlyAccountName/Home
がDashboard()
に私を取る持っているために燃える欲望を持っているが、これは、(404)は動作しません。私はfriendlyAccountNameコントローラを探しているという理由があると思います。
私のコントローラのいずれかの後にアカウントを指定する必要がある場合は、すべてのコントローラがダウンしても、対応するコントローラが見つからない場合は、次のルートに進む方法がありますか?リフレクションを使用し、コントローラのリストを変更するたびに制約を維持しないようにする方法はありますか?
EDIT
あなたはリフレクションを使用しない方法を知っているか、少なくともこの領域に派生型の検索が含まれていますか?私は、第2のルートパラメータがコントローラ名と合致するときにそのオーバーヘッドを2回発生させるという考えが嫌いです(コントローラを構築するときにパス制約を再度検索します)。私はコントローラを構築してからバックアップして次のルートに落ちる時点で例外をキャッチする方法があることを望みます。
、 'のArあなたは親愛なるidパラメータを埋めるだろうし、デフォルトのコントローラとアクションに私を送り、 'Area/friendly/Controller/Action'は失敗するでしょう。 –
ああ、申し訳ありません、' {accountFriendlyId} '有効な操作名になります。私は答えを更新します。 –
これらの文字列の解析方法は何ですか?私はリテラルでインラインで行うことができないという手がかりを持っていませんでした(特にこれを使用しないでしょう)。 –