私のアプリケーションでは、エリア(XYZ)にコントローラー(XYZController)があり、エリア内に他のコントローラーがたくさんあります。XYZControllerには、インデックス、表示、作成、編集などの一般的なアクションがあります。特定の機能に関連するより具体的なアクションは、対応するコントローラーに適宜配置されます。
app / XYZ(area)/ XYZ(Controller)/ Createのような構造のURLを避けるために、エリアルートレジスタファイルに次のようにルーティングを追加しました。
context.MapRoute(
"XYZ_AreaDefaultControllerActions",
"XYZ/{action}/{id}",
new { controller = "XYZ", id = UrlParameter.Optional },
new { controller = "XYZ" },
new string[] { "App.Web.Areas.XYZ.Controllers.*" }
);
context.MapRoute(
"XYZ_default",
"XYZ/{controller}/{action}/{id}",
new { controller = "XYZ", action = "Index", id = UrlParameter.Optional}
);
このマッピングは、次のURLをルーティングします:app / XYZ / Create to area = XYZ、Controller = XYZ and Action = Createこれは正しく、私がやりたいことですが、他のいくつかのPostアクションのルーティングを台無しにします。
これを考慮して、いくつかのPostアクションを持つNotesコントローラーと呼ばれる別のコントローラーがあります。
リクエストがHTTPGetであり、ルートデバッガーからの出力が、2番目のルート定義が一致し、最初のルート定義が一致しないことを示している場合、URLが/ app / XYZ / Notes / List/idであるアクションは正しくルーティングされます。
url / App / XYZ / Notes / AddNoteを使用してアクションAddNoteを使用して同じコントローラーに投稿すると、ルートデバッガーに従って最初のルート定義が一致し、その結果、Controller = XYZ、Actionを実行するため、アクションが見つかりません。 =メモ、Id=AddNote。ルートデバッガーからの出力は次のとおりです。
一致| URL | デフォルト| 制約
真| XYZ/{アクション}/{id} | コントローラ=XYZ、id = | コントローラー=XYZ
真| XYZ/{コントローラー}/{アクション}/{id} | コントローラ=XYZ、アクション=インデックス、id = |(null)
問題は、最初のルートの制約が、[取得]で制約を適用しているときに、Postの場合にそれを十分に制限していないように見えることです。
ここで何が問題になっているのか、何か提案はありますか?