アプリケーションが起動したら、次のルートを登録します: website.com/slug -> page1.aspx
しかし、どうすればそのルートを次のように再登録できますか: website.com/slug ->page2.aspx
RouteTable をクリアしてルートを再度登録できることはわかっていますが、これにより、サイト上の全員のルートが台無しになります。
特定のユーザーだけに新しいルートを登録する方法はありますか?
アプリケーションが起動したら、次のルートを登録します: website.com/slug -> page1.aspx
しかし、どうすればそのルートを次のように再登録できますか: website.com/slug ->page2.aspx
RouteTable をクリアしてルートを再度登録できることはわかっていますが、これにより、サイト上の全員のルートが台無しになります。
特定のユーザーだけに新しいルートを登録する方法はありますか?
ユーザー名/ロールメンバーシップに応じてユーザーを特定のエリアにリダイレクトする独自のカスタムRouteクラスをいつでも作成できるようにしたいと思います...ただし、リダイレクトはログインアクションの一部である可能性もあります。
[HttpPost]
public ActionResult Login(LoginCredentials user)
{
// authenticate
...
if (User.IsInRole("admin"))
{
return this.RedirectToAction("Index", "User", new { area = "Admin" });
}
return this.RedirectToAction("Index", "User");
}
This action assumes there's Admin area in your application.
Custom route constraint
もう1つの可能性は、カスタムルート制約を設定することです。したがって、実際には2つのルートを定義しますが、1つには特定の制約があります。
routes.MapRoute(
"Admin", // Route name
"{controller}/{action}/{id}",
new { area = "Admin", controller = "User", action = "Index", id = UrlParameter.Optional },
new { isAdmin = new AdminRouteConstraint() }
);
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}",
new { controller = "User", action = "Index", id = UrlParameter.Optional }
);
このようにして、管理者をアプリケーションの管理領域にルーティングし、そこにある特定の機能を提供することができます。ただし、管理領域が必要なわけではありません。それは私のルート定義です。ルートのデフォルトを希望どおりに定義できます。