@@ -141,7 +141,8 @@ public virtual IController CreateController(RequestContext requestContext, strin
141
141
throw new ArgumentNullException ( "requestContext" ) ;
142
142
}
143
143
144
- if ( String . IsNullOrEmpty ( controllerName ) && ! requestContext . RouteData . HasDirectRouteMatch ( ) )
144
+ if ( String . IsNullOrEmpty ( controllerName ) &&
145
+ ( requestContext . RouteData == null || ! requestContext . RouteData . HasDirectRouteMatch ( ) ) )
145
146
{
146
147
throw new ArgumentException ( MvcResources . Common_NullOrEmpty , "controllerName" ) ;
147
148
}
@@ -153,6 +154,10 @@ public virtual IController CreateController(RequestContext requestContext, strin
153
154
154
155
protected internal virtual IController GetControllerInstance ( RequestContext requestContext , Type controllerType )
155
156
{
157
+ if ( requestContext == null )
158
+ {
159
+ throw new ArgumentNullException ( "requestContext" ) ;
160
+ }
156
161
if ( controllerType == null )
157
162
{
158
163
throw new HttpException ( 404 ,
@@ -170,6 +175,7 @@ protected internal virtual IController GetControllerInstance(RequestContext requ
170
175
controllerType ) ,
171
176
"controllerType" ) ;
172
177
}
178
+
173
179
return ControllerActivator . Create ( requestContext , controllerType ) ;
174
180
}
175
181
@@ -214,7 +220,7 @@ protected internal virtual Type GetControllerType(RequestContext requestContext,
214
220
// first search in the current route's namespace collection
215
221
object routeNamespacesObj ;
216
222
Type match ;
217
- if ( routeData . DataTokens . TryGetValue ( RouteDataTokenKeys . Namespaces , out routeNamespacesObj ) )
223
+ if ( routeData != null && routeData . DataTokens . TryGetValue ( RouteDataTokenKeys . Namespaces , out routeNamespacesObj ) )
218
224
{
219
225
IEnumerable < string > routeNamespaces = routeNamespacesObj as IEnumerable < string > ;
220
226
if ( routeNamespaces != null && routeNamespaces . Any ( ) )
@@ -232,18 +238,19 @@ protected internal virtual Type GetControllerType(RequestContext requestContext,
232
238
}
233
239
234
240
// then search in the application's default namespace collection
241
+ RouteBase route = routeData == null ? null : routeData . Route ;
235
242
if ( ControllerBuilder . DefaultNamespaces . Count > 0 )
236
243
{
237
244
HashSet < string > namespaceDefaults = new HashSet < string > ( ControllerBuilder . DefaultNamespaces , StringComparer . OrdinalIgnoreCase ) ;
238
- match = GetControllerTypeWithinNamespaces ( routeData . Route , controllerName , namespaceDefaults ) ;
245
+ match = GetControllerTypeWithinNamespaces ( route , controllerName , namespaceDefaults ) ;
239
246
if ( match != null )
240
247
{
241
248
return match ;
242
249
}
243
250
}
244
251
245
252
// if all else fails, search every namespace
246
- return GetControllerTypeWithinNamespaces ( routeData . Route , controllerName , null /* namespaces */ ) ;
253
+ return GetControllerTypeWithinNamespaces ( route , controllerName , null /* namespaces */ ) ;
247
254
}
248
255
249
256
private static Type GetControllerTypeFromDirectRoute ( RouteData routeData )
0 commit comments