Skip to content

Commit 145c298

Browse files
committed
Add additional requestContext and requestContext.RouteData null checks
- #6
1 parent eeb1347 commit 145c298

File tree

1 file changed

+11
-4
lines changed

1 file changed

+11
-4
lines changed

src/System.Web.Mvc/DefaultControllerFactory.cs

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)