ASP.NET MVCで管理セクションのルーティングを設定する方法は?
-
05-07-2019 - |
質問
通常、私のURLは標準のように見えます: www.example.com/controller/action
次に、管理セクションを次のように設定します:
www.example.com/admin/ www.example.com/admin/user/list www.example.com/admin/content/add etc.
フォーマットは次のとおりです: www.example.com/admin/controller/action
ルートの設定方法がわからないため、上記のようになります。
解決
ルート定義の先頭に「admin」セクションがハードコーディングされた新しいパスをマップする必要があります。
たとえば、これを Global.asax.cs
ファイルの RegisterRoutes
のルートに追加し、デフォルトルートの上に表示されることを確認します(追加していない場合)その他のルート):
routes.MapRoute(
"Default",
"admin/{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = "" }
);
注:ルート定義の開始時にハードコードされた「admin」部分。
注2:デフォルト以外のルートを追加した場合、ルートが正しく順序付けられていることを確認する必要があります。
MVCルーティングに関する Scott Guthrie からの優れたブログ投稿へのリンクです。 : URLルーティング
他のヒント
Kelseyの答えは正解ですが、議論に何かを追加したかったのです。別のオプションは、実際に" admin"を持たないことですルーティングはすべて行われますが、制限されたURLに実際にアクセスするには管理者認証セッションが必要です。
これは多くの場合、「伝統的」に物事が行われる方法です。 RESTfulアプリケーション。コントローラーは操作するリソースのタイプを表し、アクションは動詞、idはそのリソースの特定のメンバーの一意の識別子です。
つまり、次の代わりに:
/content/list (for normal users)
/admin/content/add (for admins)
次のようになります
/content/list (for everyone)
/content/add (for admin, but must be authenticated to work)
URLに/ admin /を追加しても実際には利点は追加されません(おそらく、/ adminの下にあるものに対して単一のルールでセキュリティロジックを記述できることを除きます)が、トレードオフはより複雑なルートであり、標準のRESTfulに違反します。標準的な慣行を破ること自体は悪いことではありませんが、それらが理由のために標準的であると考えるべきです。
どちらのURLスタイルでも、ユーザーを認証する必要があることに注意する必要があります。そうでなければ、誰でも使用できます。
ASP.NET MVCでは、ActionFiltersを使用して、ユーザーレベルに基づいてアクション(またはコントローラー全体)へのアクセスを制限できます。これらのフィルターで管理者専用アクションを装飾することにより、認証された管理者ユーザーのみが実際にそれらを使用できるようにすることができます。
Scott Gu ブログエントリまたは Rob Connery's詳しくは投稿をご覧ください。
MVCバージョン2の時点で、適切にこれを行うことができる「エリア」の概念が追加されました。: MVC 2プレビューに関するScottGuの投稿。