コード例 #1
0
        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;
        }