public string SelectAction(ODataPath odataPath, HttpControllerContext controllerContext, ILookup <string, HttpActionDescriptor> actionMap) { if (odataPath.PathTemplate != "~/entityset/key/property") { return(null); } var entitySetPathSegment = odataPath.Segments.OfType <EntitySetPathSegment>().Single(); var keyValuePathSegment = odataPath.Segments.OfType <KeyValuePathSegment>().Single(); var propertyAccessPathSegment = odataPath.Segments.OfType <PropertyAccessPathSegment>().Single(); var actionName = string.Format(CultureInfo.InvariantCulture, "GetPropertyFrom{0}", entitySetPathSegment.EntitySetName); if (actionMap.Contains(actionName) && actionMap[actionName].Any(desc => MatchHttpMethod(desc, controllerContext.Request.Method))) { controllerContext.RouteData.Values.Add("propertyName", propertyAccessPathSegment.PropertyName); if (!CompositeODataKeyHelper.TryEnrichRouteValues(keyValuePathSegment.Value, controllerContext.RouteData.Values)) { controllerContext.RouteData.Values.Add("key", keyValuePathSegment.Value); } return(actionName); } return(null); }
public override string SelectAction(ODataPath odataPath, HttpControllerContext controllerContext, ILookup <string, HttpActionDescriptor> actionMap) { var action = base.SelectAction(odataPath, controllerContext, actionMap); if (action != null) { var routeValues = controllerContext.RouteData.Values; if (routeValues.ContainsKey(ODataRouteConstants.Key)) { var keyRaw = routeValues[ODataRouteConstants.Key] as string; if (keyRaw != null) { if (!CompositeODataKeyHelper.TryEnrichRouteValues(keyRaw, routeValues)) { return(action); } } } } return(action); }