ASP.NET MVC 3 路由区域失败。

4

我有以下路由:

我的网站路由位于 WebSite/Global.asax.cs 文件中:

namespace WebSite
{
    public class MvcApplication : HttpApplication
    {
        public static void RegisterRoutes(RouteCollection routes) {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
            ...
            routes.MapRoute(
                "Default",
                "Authenticated/{controller}/{action}/{id}",
                new { controller = "Home", action = "Index", id = UrlParameter.Optional },
                new[] { "WebSite.Controllers" }
            );      
            ...
        }

        void Application_Start()
        {
            ...
            AreaRegistration.RegisterAllAreas();
            RegisterRoutes(RouteTable.Routes);
            ...
        }       
    }
}

我的管理区路由在 WebSite/Areas/Admin/AdminAreaRegistration.cs 文件中:

namespace WebSite.Areas.Admin
{
    public class AdminAreaRegistration : AreaRegistration
    {
        public override string AreaName
        {
            get
            {
                return "Admin";
            }
        }

        public override void RegisterArea(AreaRegistrationContext context)
        {
            context.MapRoute(
                "Admin_default",
                "qwerty/Admin/{controller}/{action}/{id}",
                new { action = "Index", id = UrlParameter.Optional },
                new[] { "WebSite.Areas.Admin.Controllers" }
            );
        }
    }
}

我的网址:

WebSite: http://www.mywebsite.com/Authenticated/Controller/Action...
Admin: http://www.mywebsite.com/qwerty/Admin/Controller/Action...

我的问题:

我可以通过网站URL直接调用管理区域的控制器/操作,而不需要使用"qwerty/Admin",这不是正确的做法。我该如何解决这个问题?

谢谢。


也许您的管理路由与控制器操作不匹配,因为您没有在路由中定义控制器。我的意思是“controller =“Home”语句。 - Andrey Gubal
@Andrey.Gubal 如果我在网站和管理区域中有两个同名的控制器,那么会出现相同的问题,因此我将命名空间放在路由中,但并没有解决任何问题。 - Cesar
1个回答

2
只需要在每个MapRoute之后添加这段代码,就可以正常运行!
.DataTokens["UseNamespaceFallback"] = false;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接