2011-02-01 100 views
4

我的MVC 3应用程序Auth和Users中有几个区域。我正在使用Phil Haacks Route Debugging tool查看我的路线列表,并根据我的网址查看选择哪一个路线。ASP.NET MVC是否为区域创建默认路由

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

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

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

enter image description here

回答

5

我不喜欢回答我的问题,但后一天试图解决这个问题,我想我会发布答案,以防其他人有相同的问题。

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

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

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

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 } 
      ); 
     } 
    } 
+0

谢谢frennky我已经知道这一点,并配置了我的问题中描述的区域注册。 AuthAreaRegistration.cs文件中的默认路由以上面绿色突出显示。我不明白的是,如果我已经在我的AreaRegistration.cs文件和我的Global.asax文件中配置了默认路由,黄色高亮显示的路由来自哪里? MVC创建它们是因为我编辑了我的默认路由,从而将它们转换为自定义路由?如果是的话,我可以摆脱那个默认路线? – Cragly 2011-02-01 12:02:17

+0

您能否向我们提供您的路线注册代码以及global.asax和Application_Start方法。 – frennky 2011-02-01 13:15:03

0

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

JB