private static HttpRequestMessage CreateHttpRequestMessage(HttpActionDescriptor actionDescriptor, ODataRoute oDataRoute, HttpConfiguration httpConfig) { Contract.Requires(httpConfig != null); Contract.Requires(oDataRoute != null); Contract.Requires(httpConfig != null); Contract.Ensures(Contract.Result<HttpRequestMessage>() != null); Contract.Assume(oDataRoute.Constraints != null); var httpRequestMessage = new HttpRequestMessage(actionDescriptor.SupportedHttpMethods.First(), "http://any/"); var requestContext = new HttpRequestContext { Configuration = httpConfig }; httpRequestMessage.SetConfiguration(httpConfig); httpRequestMessage.SetRequestContext(requestContext); var httpRequestMessageProperties = httpRequestMessage.ODataProperties(); Contract.Assume(httpRequestMessageProperties != null); httpRequestMessageProperties.Model = oDataRoute.GetEdmModel(); httpRequestMessageProperties.RouteName = oDataRoute.GetODataPathRouteConstraint().RouteName; httpRequestMessageProperties.RoutingConventions = oDataRoute.GetODataPathRouteConstraint().RoutingConventions; httpRequestMessageProperties.PathHandler = oDataRoute.GetODataPathRouteConstraint().PathHandler; return httpRequestMessage; }
private static IEnumerable<ODataActionDescriptor> GetODataActionDescriptorsFromAttributeRoutes(ODataRoute oDataRoute, HttpConfiguration httpConfig) { Contract.Requires(oDataRoute != null); Contract.Requires(oDataRoute.Constraints != null); var attributeRoutingConvention = (AttributeRoutingConvention)oDataRoute .GetODataPathRouteConstraint() .RoutingConventions? .SingleOrDefault(convention => convention is AttributeRoutingConvention); if (attributeRoutingConvention != null) { return attributeRoutingConvention .GetInstanceField<IDictionary<ODataPathTemplate, HttpActionDescriptor>>("_attributeMappings", true) .Select(pair => GetODataActionDescriptorFromAttributeRoute(pair.Value, oDataRoute, httpConfig)) .Where(descriptor => descriptor != null); } return new List<ODataActionDescriptor>(); }