質問

通常、私の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の投稿

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top