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

我在MVC 3应用程序Auth和Users中有几个区域。 我正在使用Phil Haacks路由调试工具来查看我的路由列表,并根据我的网址查看选择哪个路由。

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

您还可以看到我在Auth区域(绿色突出显示)中创建了一个默认路由,它只是指向我的Auth控制器的登录操作。 我调试了RouteTable,它在AreaRegistration.RegisterAllAreas(); 方法被调用。 然而,它并没有被加入到AreaRegistration中,因为它们也通过了。

ASP.NET MVC会将此作为默认添加吗?如果可以,我可以以某种方式删除它吗?

在这里输入图像描述


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

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

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

我不知道为什么我的MVC应用程序保持并填充旧的路线,但只要我的垃圾箱被清除,新的dll创建了一切正常的应用程序。 如果有人知道为什么会这样,那么我会非常感兴趣。


是的,每个区域都有自己的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 }
            );
        }
    }

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

JB

链接地址: http://www.djcxy.com/p/36755.html

上一篇: Does ASP.NET MVC create default routes for areas

下一篇: Areas in asp.net mvc, only one work at time