これまでのところ(簡潔にするために)私はglobal.asaxに次のように登録された1つのルートを持っています:
routes.Add(new LowercaseRoute("{action}/{id}", new MvcRouteHandler())
{
Defaults = new RouteValueDictionary(new { controller = "Home", action = "Index", id = UrlParameter.Optional }),
DataTokens = rootNamespace
});
「rootNamespace」は
var rootNamespace = new RouteValueDictionary(new { namespaces = new[] { "MyApp.Web.Controllers" } });
LowercaseRouteはRouteを継承し、すべてのパスを小文字にします。私もこのように登録されたエリアを持っています:
context.Routes.Add(new LowercaseRoute("admin/{controller}/{action}/{id}", new MvcRouteHandler())
{
Defaults = new RouteValueDictionary(new { action = "List", id = UrlParameter.Optional }),
DataTokens = adminNamespace
});
adminNamespaceが別の名前空間である場合、デフォルトルートと同じ考えですが、正しい名前空間を使用します。これは正常に機能します。次のようなURLにアクセスできます。
http://example.com/contact <- default route, "Home" controller
http://example.com/admin/account <- area route, "Account" controller, default "List" action
問題はこれが
http://example.com/admin/home/contact
また動作します。「管理者」エリアの下に「連絡」アクションを持つ「ホーム」コントローラーはありません。「/contact」から正しいページを取得しますが、URLは「/ admin / home/contact」です。
これを防ぐ方法はありますか?
ありがとう。