ASP.NET MVC是否为区域创建默认路由

时间:2011-02-01 11:00:27

标签: asp.net-mvc asp.net-mvc-routing asp.net-mvc-areas

我的MVC 3应用程序Auth和Users中有几个区域。我正在使用Phil Haacks Route Debugging tool查看我的路线列表,并根据我的网址查看哪个路线被选中。

然而,有一些路线存在,我没有在我的AreaRegistration文件或Globalasax中创建,我不知道它们来自何处或如何摆脱它们。路线在下面以黄色突出显示。

你还可以看到我在我的Auth区域中创建了一个默认路由(以绿色突出显示),它只是指向我的Auth控制器的Login操作。我调试了RouteTable,它在AreaRegistration.RegisterAllAreas()时被添加;方法被调用。但是,它也没有被添加到AreaRegistration中,因为它也已经逐步完成。

ASP.NET MVC是否将此作为默认值添加,如果是这样,我可以以某种方式将其删除吗?

enter image description here

3 个答案:

答案 0 :(得分:5)

我不想回答我自己的问题,但经过一天试图解决这个问题后,我想我会发布答案,以防其他人有同样的问题。

最后,我从我的应用程序中删除了所有区域,并且只有基本的Global.asax路由。当我运行应用程序时,我可以在路由调试器中看到路由集合仍在使用来自现在不存在的区域的路由。在尝试了许多事情,包括删除我的ASP.NET临时文件中的所有内容,搞乱IIS AppPools并清理浏览器数据后,我终于找到了答案。

我从网站bin文件夹中删除了所有内容,进行了重建并且低了,看到路线消失了。我用所描述的配置恢复了我的区域,一切正常。

我不知道为什么我的MVC应用程序保留并填充旧路由但是一旦我的bin被清除并且新的dll创建了一切正常工作。如果有人在那里知道为什么会这样,那么我会非常感兴趣。

答案 1 :(得分:2)

是的,每个区域都有自己的AreaRegistration文件,用于定义区域路径。在您的区域根文件夹中查找。

对于您的用户区域,请查看区域 - >用户 - > UserAreaRegistration.cs

它应包含以下内容:

    public class UserAreaRegistration : AreaRegistration
    {
        public override string AreaName
        {
            get
            {
                return "User";
            }
        }

        public override void RegisterArea(AreaRegistrationContext context)
        {
            context.MapRoute(
                "User_default",
                "User/{controller}/{action}/{id}",
                new { action = "Index", id = UrlParameter.Optional }
            );
        }
    }

答案 2 :(得分:0)

您是否重命名了项目?它通过反射加载路径,可能是通过扫描bin文件夹中的所有内容。因此,如果您重构代码并更改了程序集名称,则可以轻松地获取旧代码并注册这些路径。

JB