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<SwaggerRoute> GenerateOperationImportRoutes(ODataRoute oDataRoute) { Contract.Requires(oDataRoute != null); Contract.Requires(oDataRoute.Constraints != null); return oDataRoute.GetEdmModel() .EntityContainer .OperationImports()? .Select(operationImport => new SwaggerRoute(ODataSwaggerUtilities.GetPathForOperationImport(operationImport), oDataRoute, ODataSwaggerUtilities.CreateSwaggerPathForOperationImport(operationImport, oDataRoute))); }
/// <summary> /// Initialize the operations to Swagger model. /// </summary> /// <param name="oDataRoute">The o data route.</param> /// <returns></returns> private static IEnumerable<SwaggerRoute> GenerateOperationRoutes(ODataRoute oDataRoute) { Contract.Requires(oDataRoute != null); Contract.Requires(oDataRoute.Constraints != null); var routes = new List<SwaggerRoute>(); var edmSchemaElements = oDataRoute.GetEdmModel().SchemaElements; if (edmSchemaElements != null) { foreach (var operation in edmSchemaElements.OfType<IEdmOperation>()) { // skip unbound operation if (!operation.IsBound) { continue; } var edmOperationParameters = operation.Parameters; if (edmOperationParameters != null && edmOperationParameters.Any()) { var boundParameter = edmOperationParameters.First(); Contract.Assume(boundParameter != null); var boundType = boundParameter.GetOperationType().GetDefinition(); // skip operation bound to non entity (or entity collection) if (boundType.TypeKind == EdmTypeKind.Entity) { var entityType = (IEdmEntityType)boundType; var edmEntitySets = oDataRoute.GetEdmModel().EntityContainer.EntitySets(); Contract.Assume(edmEntitySets != null); routes.AddRange(edmEntitySets.Where(es => es.GetEntityType().Equals(entityType)).Select(entitySet => new SwaggerRoute(ODataSwaggerUtilities.GetPathForOperationOfEntity(operation, entitySet), oDataRoute, ODataSwaggerUtilities.CreateSwaggerPathForOperationOfEntity(operation, entitySet)))); } else if (boundType.TypeKind == EdmTypeKind.Collection) { var collectionType = boundType as IEdmCollectionType; if (collectionType?.ElementType?.GetDefinition().TypeKind == EdmTypeKind.Entity) { var entityType = (IEdmEntityType)collectionType.ElementType?.GetDefinition(); var edmEntitySets = oDataRoute.GetEdmModel().EntityContainer.EntitySets(); Contract.Assume(edmEntitySets != null); routes.AddRange(edmEntitySets.Where(es => es.GetEntityType().Equals(entityType)).Select(entitySet => new SwaggerRoute(ODataSwaggerUtilities.GetPathForOperationOfEntitySet(operation, entitySet), oDataRoute, ODataSwaggerUtilities.CreateSwaggerPathForOperationOfEntitySet(operation, entitySet, oDataRoute)))); } } } } } return routes; }