@@ -141,7 +141,8 @@ public virtual IController CreateController(RequestContext requestContext, strin
141141 throw new ArgumentNullException ( "requestContext" ) ;
142142 }
143143
144- if ( String . IsNullOrEmpty ( controllerName ) && ! requestContext . RouteData . HasDirectRouteMatch ( ) )
144+ if ( String . IsNullOrEmpty ( controllerName ) &&
145+ ( requestContext . RouteData == null || ! requestContext . RouteData . HasDirectRouteMatch ( ) ) )
145146 {
146147 throw new ArgumentException ( MvcResources . Common_NullOrEmpty , "controllerName" ) ;
147148 }
@@ -153,6 +154,10 @@ public virtual IController CreateController(RequestContext requestContext, strin
153154
154155 protected internal virtual IController GetControllerInstance ( RequestContext requestContext , Type controllerType )
155156 {
157+ if ( requestContext == null )
158+ {
159+ throw new ArgumentNullException ( "requestContext" ) ;
160+ }
156161 if ( controllerType == null )
157162 {
158163 throw new HttpException ( 404 ,
@@ -170,6 +175,7 @@ protected internal virtual IController GetControllerInstance(RequestContext requ
170175 controllerType ) ,
171176 "controllerType" ) ;
172177 }
178+
173179 return ControllerActivator . Create ( requestContext , controllerType ) ;
174180 }
175181
@@ -214,7 +220,7 @@ protected internal virtual Type GetControllerType(RequestContext requestContext,
214220 // first search in the current route's namespace collection
215221 object routeNamespacesObj ;
216222 Type match ;
217- if ( routeData . DataTokens . TryGetValue ( RouteDataTokenKeys . Namespaces , out routeNamespacesObj ) )
223+ if ( routeData != null && routeData . DataTokens . TryGetValue ( RouteDataTokenKeys . Namespaces , out routeNamespacesObj ) )
218224 {
219225 IEnumerable < string > routeNamespaces = routeNamespacesObj as IEnumerable < string > ;
220226 if ( routeNamespaces != null && routeNamespaces . Any ( ) )
@@ -232,18 +238,19 @@ protected internal virtual Type GetControllerType(RequestContext requestContext,
232238 }
233239
234240 // then search in the application's default namespace collection
241+ RouteBase route = routeData == null ? null : routeData . Route ;
235242 if ( ControllerBuilder . DefaultNamespaces . Count > 0 )
236243 {
237244 HashSet < string > namespaceDefaults = new HashSet < string > ( ControllerBuilder . DefaultNamespaces , StringComparer . OrdinalIgnoreCase ) ;
238- match = GetControllerTypeWithinNamespaces ( routeData . Route , controllerName , namespaceDefaults ) ;
245+ match = GetControllerTypeWithinNamespaces ( route , controllerName , namespaceDefaults ) ;
239246 if ( match != null )
240247 {
241248 return match ;
242249 }
243250 }
244251
245252 // if all else fails, search every namespace
246- return GetControllerTypeWithinNamespaces ( routeData . Route , controllerName , null /* namespaces */ ) ;
253+ return GetControllerTypeWithinNamespaces ( route , controllerName , null /* namespaces */ ) ;
247254 }
248255
249256 private static Type GetControllerTypeFromDirectRoute ( RouteData routeData )
0 commit comments