RouteTable.Routes上的NullReferenceException

时间:2011-06-28 04:48:37

标签: asp.net-mvc iis-7.5 nullreferenceexception asp.net-routing

我的ASP.NET MVC 3 Web项目工作正常,然后我重新编译它,现在我收到此错误(更改了一些路径和命名空间以保护无辜):

  

对象引用未设置为   对象的实例。描述:一个   未处理的异常发生在   当前网络的执行   请求。请查看堆栈跟踪   有关错误的更多信息   它起源于代码。

     

异常详细信息:   System.NullReferenceException:Object   引用未设置为的实例   对象

     

来源错误:

     

第66行:
  RouteTable.Routes.MapRoute(第67行:
  “DefaultRoutes”,//路线名称线   68:
  “{模块} / {控制器} / {行动} /(编号)”,   //带参数的URL

     

源文件:.... \ Global.asax.cs
  行:66

     

堆栈追踪:

     

[NullReferenceException:Object   引用未设置为的实例   对象。]
  Project.MvcApplication.RegisterRoutes(RouteCollection   路线)在D:..... \ Global.asax.cs:66   Project.MvcApplication.Application_Start()   在D:..... \ Global.asax.cs:139

     

[HttpException(0x80004005):Object   引用未设置为的实例   对象。]
  System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode(HttpContext的   上下文,HttpApplication app)+4051717   System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr的   appContext,HttpContext上下文,   MethodInfo []处理程序)+191
  System.Web.HttpApplication.InitSpecial(HttpApplicationState   state,MethodInfo []处理程序,IntPtr   appContext,HttpContext context)+352   System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr的   appContext,HttpContext context)+407   System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr的   appContext)+375

     

[HttpException(0x80004005):Object   引用未设置为的实例   对象。]
  System.Web.HttpRuntime.FirstRequestInit(HttpContext的   上下文)+11642112
  System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext的   上下文)+141
  System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest   wr,HttpContext context)+4865877

我在Windows 7 x64上使用IIS7.5,并且应用程序池配置为使用.NET 4和“集成”托管管道运行。

我尝试重新启动,并且还清除了bin和obj文件夹但没有成功。

一些重要的额外信息 - 上面错误页面中缺少的一行:

RouteTable.Routes.MapRoute(
    "DefaultRoutes", // Route name
    "{module}/{controller}/{action}/{id}", // URL with parameters
    new { module = _loadedModules.FirstOrDefault().Name, controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);

2 个答案:

答案 0 :(得分:1)

在你的global.asax.cs中,你可以像这样写

public static void RegisterRoutes(RouteCollection routes)
{
    routes.MapRoute(....);//you should use routes parameter rather than RouteTable.Routes   
}

答案 1 :(得分:0)

这个项目动态加载模块,原始ASP.NET错误页面中不清楚的是NullReferenceException是由MapRoute()方法调用的最后一行引起的。

事实证明_loadedModules为空,因此FirstOrDefault()返回null - 因此异常。