/// <summary> /// Test method to call constraint.Match using the proper arguments for each platform. /// </summary> /// <param name="constraint">The constraint object.</param> /// <param name="versionRequest">The abstracted request.</param> /// <param name="direction">The abstracted route direction.</param> /// <returns>Result from constraint.Match,</returns> private bool ConstraintMatch(ODataVersionConstraint constraint, TestVersionRequest versionRequest, RouteDirection direction) { #if NETCORE AspNetCore.Http.HttpContext context = new AspNetCore.Http.DefaultHttpContext(); AspNetCore.Http.HttpRequest request = context.Request; foreach (KeyValuePair <string, string> kvp in versionRequest.Headers) { request.Headers.Add(kvp.Key, kvp.Value); } System.Uri requestUri = new System.Uri(versionRequest.Uri); request.Method = versionRequest.Method.ToString(); request.Host = new AspNetCore.Http.HostString(requestUri.Host, requestUri.Port); request.Scheme = requestUri.Scheme; AspNetCore.Routing.RouteDirection routeDirection = (direction == RouteDirection.UriResolution) ? AspNetCore.Routing.RouteDirection.IncomingRequest : AspNetCore.Routing.RouteDirection.UrlGeneration; return(constraint.Match(context, null, null, null, routeDirection)); #else HttpRequestMessage request = new HttpRequestMessage(versionRequest.Method, versionRequest.Uri); foreach (KeyValuePair <string, string> kvp in versionRequest.Headers) { request.Headers.TryAddWithoutValidation(kvp.Key, kvp.Value); } System.Web.Http.Routing.HttpRouteDirection routeDirection = (direction == RouteDirection.UriResolution) ? System.Web.Http.Routing.HttpRouteDirection.UriResolution : System.Web.Http.Routing.HttpRouteDirection.UriGeneration; return(constraint.Match(request, null, null, null, routeDirection)); #endif }
/// <summary> /// Test method to call constraint.Match using the proper arguments for each platform. /// </summary> /// <param name="constraint">The constraint object.</param> /// <param name="routeRequest">The abstracted request.</param> /// <param name="direction">The abstracted route direction.</param> /// <returns>Result from constraint.Match,</returns> private bool ConstraintMatch(ODataPathRouteConstraint constraint, TestRouteRequest routeRequest, Dictionary <string, object> values, RouteDirection direction) { #if NETCORE IRouteBuilder config = RoutingConfigurationFactory.Create(); if (routeRequest?.PathHandler != null && routeRequest?.Model != null) { config.MapODataServiceRoute(_routeName, "", builder => builder.AddService(Microsoft.OData.ServiceLifetime.Singleton, sp => routeRequest.PathHandler) .AddService(Microsoft.OData.ServiceLifetime.Singleton, sp => routeRequest.Model)); } else if (routeRequest?.PathHandler != null) { config.MapODataServiceRoute(_routeName, "", builder => builder.AddService(Microsoft.OData.ServiceLifetime.Singleton, sp => routeRequest.PathHandler)); } else if (routeRequest?.Model != null) { config.MapODataServiceRoute(_routeName, "", builder => builder.AddService(Microsoft.OData.ServiceLifetime.Singleton, sp => routeRequest.Model)); } else { config.MapODataServiceRoute(_routeName, "", builder => { }); } HttpRequest request = (routeRequest != null) ? RequestFactory.Create(routeRequest.Method, routeRequest.Uri, config, _routeName) : RequestFactory.Create(); // The RequestFactory will create a request container which most tests want but for checking the constraint, // we don't want a request container before the test runs since Match() creates one. request.DeleteRequestContainer(true); if (routeRequest != null) { routeRequest.InnerRequest = request; } AspNetCore.Routing.RouteDirection routeDirection = (direction == RouteDirection.UriResolution) ? AspNetCore.Routing.RouteDirection.IncomingRequest : AspNetCore.Routing.RouteDirection.UrlGeneration; RouteValueDictionary routeValues = new RouteValueDictionary(values); return(constraint.Match(request.HttpContext, null, null, routeValues, routeDirection)); #else HttpRequestMessage request = (routeRequest != null) ? new HttpRequestMessage(routeRequest.Method, routeRequest.Uri) : new HttpRequestMessage(); var httpRouteCollection = new HttpRouteCollection { { _routeName, new HttpRoute() }, }; var configuration = new HttpConfiguration(httpRouteCollection); if (routeRequest != null && routeRequest.PathHandler != null && routeRequest.Model != null) { configuration.CreateODataRootContainer(_routeName, builder => builder.AddService(Microsoft.OData.ServiceLifetime.Singleton, sp => routeRequest.PathHandler) .AddService(Microsoft.OData.ServiceLifetime.Singleton, sp => routeRequest.Model)); } else if (routeRequest != null && routeRequest.PathHandler != null) { configuration.CreateODataRootContainer(_routeName, builder => builder.AddService(Microsoft.OData.ServiceLifetime.Singleton, sp => routeRequest.PathHandler)); } else if (routeRequest != null && routeRequest.Model != null) { configuration.CreateODataRootContainer(_routeName, builder => builder.AddService(Microsoft.OData.ServiceLifetime.Singleton, sp => routeRequest.Model)); } else { PerRouteContainer perRouteContainer = configuration.GetPerRouteContainer() as PerRouteContainer; perRouteContainer.SetODataRootContainer(_routeName, _rootContainer); } request.SetConfiguration(configuration); if (routeRequest != null) { routeRequest.InnerRequest = request; } HttpRouteDirection routeDirection = (direction == RouteDirection.UriResolution) ? HttpRouteDirection.UriResolution : HttpRouteDirection.UriGeneration; return(constraint.Match(request, null, null, values, routeDirection)); #endif }