internal ODataRouteBuilderContext( ODataRouteMapping routeMapping, ControllerActionDescriptor actionDescriptor, ODataApiVersioningOptions options) { Contract.Requires(routeMapping != null); Contract.Requires(actionDescriptor != null); Contract.Requires(options != null); ApiVersion = routeMapping.ApiVersion; serviceProvider = routeMapping.Services; EdmModel = serviceProvider.GetRequiredService <IEdmModel>(); routeAttribute = actionDescriptor.MethodInfo.GetCustomAttributes <ODataRouteAttribute>().FirstOrDefault(); RouteTemplate = routeAttribute?.PathTemplate; Route = routeMapping.Route; ActionDescriptor = actionDescriptor; Options = options; UrlKeyDelimiter = serviceProvider.GetRequiredService <ODataOptions>().UrlKeyDelimiter ?? Parentheses; var container = EdmModel.EntityContainer; if (container == null) { IsRouteExcluded = true; return; } var controllerName = actionDescriptor.ControllerName; var actionName = actionDescriptor.ActionName; EntitySet = container.FindEntitySet(controllerName); Operation = container.FindOperationImports(controllerName).FirstOrDefault()?.Operation ?? EdmModel.FindDeclaredOperations(string.Concat(container.Namespace, ".", actionName)).FirstOrDefault(); ActionType = GetActionType(EntitySet, Operation); }
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; }