internal ODataRouteBuilderContext(
            ApiVersion apiVersion,
            ODataRouteMapping routeMapping,
            ControllerActionDescriptor actionDescriptor,
            ODataApiVersioningOptions options)
        {
            ApiVersion       = apiVersion;
            Services         = routeMapping.Services;
            routeAttribute   = actionDescriptor.MethodInfo.GetCustomAttributes <ODataRouteAttribute>().FirstOrDefault();
            RouteTemplate    = routeAttribute?.PathTemplate;
            RoutePrefix      = routeMapping.RoutePrefix;
            ActionDescriptor = actionDescriptor;
            Options          = options;
            UrlKeyDelimiter  = UrlKeyDelimiterOrDefault(Services.GetRequiredService <ODataOptions>().UrlKeyDelimiter);

            var selector  = Services.GetRequiredService <IEdmModelSelector>();
            var model     = selector.SelectModel(apiVersion);
            var container = model?.EntityContainer;

            if (model == null || container == null)
            {
                EdmModel        = Services.GetRequiredService <IEdmModel>();
                IsRouteExcluded = true;
                return;
            }

            EdmModel        = model;
            Services        = new FixedEdmModelServiceProviderDecorator(Services, model);
            EntitySet       = container.FindEntitySet(actionDescriptor.ControllerName);
            Singleton       = container.FindSingleton(actionDescriptor.ControllerName);
            Operation       = ResolveOperation(container, actionDescriptor.ActionName);
            ActionType      = GetActionType(actionDescriptor);
            IsRouteExcluded = ActionType == ODataRouteActionType.Unknown;
        }
        internal ODataRouteBuilderContext(
            HttpConfiguration configuration,
            ApiVersion apiVersion,
            ODataRoute route,
            HttpActionDescriptor actionDescriptor,
            IList <ApiParameterDescription> parameterDescriptions,
            IModelTypeBuilder modelTypeBuilder,
            ODataApiExplorerOptions options)
        {
            this.route            = route;
            ApiVersion            = apiVersion;
            Services              = configuration.GetODataRootContainer(route);
            routeAttribute        = actionDescriptor.GetCustomAttributes <ODataRouteAttribute>().FirstOrDefault();
            RouteTemplate         = routeAttribute?.PathTemplate;
            RoutePrefix           = route.RoutePrefix?.Trim('/');
            ActionDescriptor      = actionDescriptor;
            ParameterDescriptions = parameterDescriptions;
            Options         = options;
            UrlKeyDelimiter = UrlKeyDelimiterOrDefault(configuration.GetUrlKeyDelimiter() ?? Services.GetService <IODataPathHandler>()?.UrlKeyDelimiter);

            var selector  = Services.GetRequiredService <IEdmModelSelector>();
            var model     = selector.SelectModel(apiVersion);
            var container = model?.EntityContainer;

            if (model == null || container == null)
            {
                EdmModel        = Services.GetRequiredService <IEdmModel>();
                IsRouteExcluded = true;
                return;
            }

            var controllerName = actionDescriptor.ControllerDescriptor.ControllerName;

            EdmModel        = model;
            Services        = new FixedEdmModelServiceProviderDecorator(Services, model);
            EntitySet       = container.FindEntitySet(controllerName);
            Singleton       = container.FindSingleton(controllerName);
            Operation       = ResolveOperation(container, actionDescriptor.ActionName);
            ActionType      = GetActionType(actionDescriptor);
            IsRouteExcluded = ActionType == ODataRouteActionType.Unknown;

            if (Operation?.IsAction() == true)
            {
                ConvertODataActionParametersToTypedModel(modelTypeBuilder, (IEdmAction)Operation, controllerName);
            }
        }