public static void IncomingMapping(this ICodeRoute route, IDictionary <string, object> values) { if (route.ControllerMapping != null) { string controller = values["controller"] as string; if (controller != null) { values["controller"] = route.ControllerMapping .Single(p => String.Equals(p.Value, controller, StringComparison.OrdinalIgnoreCase)) .Key; } } if (route.ActionMapping != null) { string action = values["action"] as string; if (action != null) { values["action"] = route.ActionMapping .Single(p => String.Equals(p.Value, action, StringComparison.OrdinalIgnoreCase)) .Key; } } }
public static TVirtualPathData DoGetVirtualPath <TVirtualPathData>(this ICodeRoute route, IDictionary <string, object> values, IDictionary <string, object> requestRouteValues, IDictionary <string, object> requestRouteDataTokens, Func <TVirtualPathData> getVirtualPath) where TVirtualPathData : class { if (values == null) { return(getVirtualPath()); } string controllerRef; string valuesRouteContext = GetRouteContext(values, requestRouteValues, requestRouteDataTokens, out controllerRef); if (valuesRouteContext == null) { return(null); } string thisRouteContext = (string)route.DataTokens[DataTokenKeys.RouteContext]; if (!String.Equals(valuesRouteContext, thisRouteContext, StringComparison.OrdinalIgnoreCase)) { if (controllerRef != null) { values["controller"] = controllerRef; } return(null); } string unmappedController = null; string unmappedAction = null; MapValue("controller", values, route.ControllerMapping, out unmappedController); bool actionWasMapped = MapValue("action", values, route.ActionMapping, out unmappedAction); TVirtualPathData virtualPath = getVirtualPath(); // See issue #291 // When the route matches don't change the controller back to its original value // because it's used by ASP.NET MVC on child requests (e.g. Html.Action()) // to locate the controller (DefaultControllerFactory). if (virtualPath == null && controllerRef != null) { values["controller"] = controllerRef; } if (actionWasMapped) { values["action"] = unmappedAction; } return(virtualPath); }