public static SwaggerRouteBuilder AddCustomSwaggerRoute(this HttpConfiguration httpConfig, ODataRoute oDataRoute, string routeTemplate) { Contract.Requires(httpConfig != null); Contract.Requires(oDataRoute != null); Contract.Requires(httpConfig.Properties != null); Contract.Ensures(Contract.Result<SwaggerRouteBuilder>() != null); oDataRoute.SetHttpConfiguration(httpConfig); var urlDecodedTemplate = HttpUtility.UrlDecode(routeTemplate); Contract.Assume(!string.IsNullOrWhiteSpace(urlDecodedTemplate)); var swaggerRoute = new SwaggerRoute(urlDecodedTemplate, oDataRoute); var swaggerRouteBuilder = new SwaggerRouteBuilder(swaggerRoute); httpConfig.Properties.AddOrUpdate(oDataRoute, key => new List<SwaggerRoute> { swaggerRoute }, (key, value) => { var swaggerRoutes = value as List<SwaggerRoute>; swaggerRoutes.Add(swaggerRoute); return swaggerRoutes; }); return swaggerRouteBuilder; }
private static HttpRequestMessage CreateHttpRequestMessage(HttpMethod httpMethod, Operation potentialOperation, SwaggerRoute potentialSwaggerRoute, HttpConfiguration httpConfig) { Contract.Requires(httpConfig != null); Contract.Requires(potentialSwaggerRoute != null); Contract.Ensures(Contract.Result<HttpRequestMessage>() != null); Contract.Assume(potentialSwaggerRoute.ODataRoute.Constraints != null); var oDataAbsoluteUri = potentialOperation.GenerateSampleODataUri(ServiceRoot, potentialSwaggerRoute.PrefixedTemplate); var httpRequestMessage = new HttpRequestMessage(httpMethod, oDataAbsoluteUri); var odataPath = GenerateSampleODataPath(potentialOperation, potentialSwaggerRoute); var requestContext = new HttpRequestContext { Configuration = httpConfig }; httpRequestMessage.SetConfiguration(httpConfig); httpRequestMessage.SetRequestContext(requestContext); var oDataRoute = potentialSwaggerRoute.ODataRoute; var httpRequestMessageProperties = httpRequestMessage.ODataProperties(); Contract.Assume(httpRequestMessageProperties != null); httpRequestMessageProperties.Model = oDataRoute.GetEdmModel(); httpRequestMessageProperties.Path = odataPath; httpRequestMessageProperties.RouteName = oDataRoute.GetODataPathRouteConstraint().RouteName; httpRequestMessageProperties.RoutingConventions = oDataRoute.GetODataPathRouteConstraint().RoutingConventions; httpRequestMessageProperties.PathHandler = oDataRoute.GetODataPathRouteConstraint().PathHandler; httpRequestMessage.SetRouteData(oDataRoute.GetRouteData("/", httpRequestMessage)); return httpRequestMessage; }
private static IEnumerable <ODataActionDescriptor> GetActionDescriptors(SwaggerRoute potentialSwaggerRoute, HttpConfiguration httpConfig) { Contract.Requires(potentialSwaggerRoute != null); var oDataActionDescriptors = new List <ODataActionDescriptor>(); oDataActionDescriptors.AddIfNotNull(GetActionDescriptors(new HttpMethod("DELETE"), potentialSwaggerRoute.PathItem.delete, potentialSwaggerRoute.Template, potentialSwaggerRoute.ODataRoute, httpConfig)); oDataActionDescriptors.AddIfNotNull(GetActionDescriptors(new HttpMethod("GET"), potentialSwaggerRoute.PathItem.get, potentialSwaggerRoute.Template, potentialSwaggerRoute.ODataRoute, httpConfig)); oDataActionDescriptors.AddIfNotNull(GetActionDescriptors(new HttpMethod("POST"), potentialSwaggerRoute.PathItem.post, potentialSwaggerRoute.Template, potentialSwaggerRoute.ODataRoute, httpConfig)); oDataActionDescriptors.AddIfNotNull(GetActionDescriptors(new HttpMethod("PUT"), potentialSwaggerRoute.PathItem.put, potentialSwaggerRoute.Template, potentialSwaggerRoute.ODataRoute, httpConfig)); oDataActionDescriptors.AddIfNotNull(GetActionDescriptors(new HttpMethod("PATCH"), potentialSwaggerRoute.PathItem.patch, potentialSwaggerRoute.Template, potentialSwaggerRoute.ODataRoute, httpConfig)); return(oDataActionDescriptors); }
private static IEnumerable<ODataActionDescriptor> GetActionDescriptors(SwaggerRoute potentialSwaggerRoute, HttpConfiguration httpConfig) { Contract.Requires(potentialSwaggerRoute != null); Contract.Requires(httpConfig != null); var oDataActionDescriptors = new List<ODataActionDescriptor>(); oDataActionDescriptors.AddIfNotNull(GetActionDescriptors(new HttpMethod("DELETE"), potentialSwaggerRoute.PathItem.delete, potentialSwaggerRoute, httpConfig)); oDataActionDescriptors.AddIfNotNull(GetActionDescriptors(new HttpMethod("GET"), potentialSwaggerRoute.PathItem.get, potentialSwaggerRoute, httpConfig)); oDataActionDescriptors.AddIfNotNull(GetActionDescriptors(new HttpMethod("POST"), potentialSwaggerRoute.PathItem.post, potentialSwaggerRoute, httpConfig)); oDataActionDescriptors.AddIfNotNull(GetActionDescriptors(new HttpMethod("PUT"), potentialSwaggerRoute.PathItem.put, potentialSwaggerRoute, httpConfig)); oDataActionDescriptors.AddIfNotNull(GetActionDescriptors(new HttpMethod("PATCH"), potentialSwaggerRoute.PathItem.patch, potentialSwaggerRoute, httpConfig)); return oDataActionDescriptors; }
private static ODataActionDescriptor GetActionDescriptors(HttpMethod httpMethod, Operation potentialOperation, SwaggerRoute potentialSwaggerRoute, HttpConfiguration httpConfig) { Contract.Requires(potentialOperation == null || httpConfig != null); Contract.Requires(potentialSwaggerRoute != null); if (potentialOperation != null) { var request = CreateHttpRequestMessage(httpMethod, potentialOperation, potentialSwaggerRoute, httpConfig); var actionDescriptor = request.GetHttpActionDescriptor(httpConfig); if (actionDescriptor != null) { actionDescriptor = MapForRestierIfNecessary(request, actionDescriptor); return new ODataActionDescriptor(actionDescriptor, potentialSwaggerRoute.ODataRoute, potentialSwaggerRoute.PrefixedTemplate, request, potentialOperation); } } return null; }
private static ODataPath GenerateSampleODataPath(Operation operation, SwaggerRoute swaggerRoute) { Contract.Requires(operation != null); Contract.Requires(swaggerRoute != null); Contract.Requires(swaggerRoute.ODataRoute.Constraints != null); Contract.Ensures(Contract.Result<ODataPath>() != null); var oDataPathRouteConstraint = swaggerRoute.ODataRoute.GetODataPathRouteConstraint(); var model = swaggerRoute.ODataRoute.GetEdmModel(); Contract.Assume(oDataPathRouteConstraint.PathHandler != null); var odataPath = operation.GenerateSampleODataUri(ServiceRoot, swaggerRoute.Template).Replace(ServiceRoot, string.Empty); var result = oDataPathRouteConstraint.PathHandler.Parse(model, ServiceRoot, odataPath); Contract.Assume(result != null); return result; }
internal SwaggerRouteBuilder(SwaggerRoute swaggerRoute) { Contract.Requires(swaggerRoute != null); _swaggerRoute = swaggerRoute; }
public SwaggerRouteBuilder(SwaggerRoute swaggerRoute) { Contract.Requires(swaggerRoute != null); SwaggerRoute = swaggerRoute; }