private static void MapRoute(HttpConfiguration httpConfiguration, IEdmModel edmModel, string routePrefix, HttpBatchHandler batchHandler)
        {
            // batch handler should be mapped first
            var routeTemplate = string.IsNullOrEmpty(routePrefix) ? ODataRouteConstants.Batch : routePrefix + '/' + ODataRouteConstants.Batch;
            httpConfiguration.Routes.MapHttpBatchRoute(routePrefix + "Batch", routeTemplate, batchHandler);

            var httpMessageHandler = HttpClientFactory.CreatePipeline(new HttpControllerDispatcher(httpConfiguration), new DelegatingHandler[0]);
            httpConfiguration.MapODataServiceRoute(routePrefix, routePrefix, edmModel, httpMessageHandler);
        }
        public static HttpConfiguration MapODataServiceRoutes(this HttpConfiguration httpConfiguration, HttpBatchHandler batchHandler)
        {
            var edmModelBuilder = (IEdmModelBuilder)httpConfiguration.DependencyResolver.GetService(typeof(IEdmModelBuilder));
            var edmModels = edmModelBuilder.Build();
            foreach (var pair in edmModels)
            {
                var routePrefix = pair.Key.Segments.Last();
                MapRoute(httpConfiguration, pair.Value, routePrefix, batchHandler);
            }

            return httpConfiguration;
        }
 public static IHttpRoute MapHttpBatchRoute(this HttpRouteCollection routes, string routeName, string routeTemplate, HttpBatchHandler batchHandler)
 {
     return routes.MapHttpRoute(routeName, routeTemplate, defaults: null, constraints: null, handler: batchHandler);
 }
 public static IHttpRoute MapODataServiceBatchRoute(this HttpRouteCollection routes, string routeName,
                                                    string routeTemplate, HttpBatchHandler batchHandler)
 {
     return routes.MapODataServiceBatchRoute(routeName, routeTemplate, null, null, batchHandler);
 }