これまでのところ(簡潔にするために)私は、Global.asaxの内の1つのルートは次のように登録している: "rootNamespaceは"ASP.NET MVCのデフォルトルート
var rootNamespace = new RouteValueDictionary(new { namespaces = new[] { "MyApp.Web.Controllers" } });
routes.Add(new LowercaseRoute("{action}/{id}", new MvcRouteHandler())
{
Defaults = new RouteValueDictionary(new { controller = "Home", action = "Index", id = UrlParameter.Optional }),
DataTokens = rootNamespace
});
ある
どこ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は別の名前空間、デフォルトルートと同じ考え方であるが、右の名前空間を持ちます。
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
も動作することである:これは正常に動作し、私はこのようなURLにアクセスすることができます。 「管理」領域に「連絡先」アクションを持つ「ホーム」コントローラはありません。それは "/ contact"からURLを "/ admin/home/contact"にして正しいページを引っ張ります。
これを防ぐ方法はありますか?
ありがとうございました。
"UseNamespaceFallback = false"を管理領域に追加するDataTokens辞書は問題を解決しました。ありがとう! – pbz