Exemplo n.º 1
0
        void UpdateBindingInfo(
            ControllerActionDescriptor action,
            ApiVersion apiVersion,
            ODataRouteMapping mapping,
            ICollection <ODataAttributeRouteInfo> routeInfos)
        {
            var routeContext = new ODataRouteBuilderContext(mapping, apiVersion, action, Options);

            if (routeContext.IsRouteExcluded)
            {
                return;
            }

            var routeBuilder     = new ODataRouteBuilder(routeContext);
            var parameterContext = new ActionParameterContext(routeBuilder, routeContext);

            if (!parameterContext.IsSupported)
            {
                return;
            }

            for (var i = 0; i < action.Parameters.Count; i++)
            {
                UpdateBindingInfo(parameterContext, action.Parameters[i]);
            }

            var templates = parameterContext.Templates;

            for (var i = 0; i < templates.Count; i++)
            {
                var template  = templates[i];
                var routeInfo = new ODataAttributeRouteInfo()
                {
                    Template      = template.RouteTemplate,
                    ODataTemplate = template.PathTemplate,
                    RouteName     = mapping.RouteName,
                    RoutePrefix   = mapping.RoutePrefix,
                };

                routeInfos.Add(routeInfo);
            }

            if (routeContext.IsOperation)
            {
                EnsureOperationHttpMethod(action, routeContext.Operation !);
            }
        }
Exemplo n.º 2
0
        void UpdateBindingInfo(ControllerActionDescriptor action, ODataRouteMapping mapping, ICollection <ODataAttributeRouteInfo> routeInfos)
        {
            var routeContext     = new ODataRouteBuilderContext(mapping, action, Options);
            var routeBuilder     = new ODataRouteBuilder(routeContext);
            var parameterContext = new ActionParameterContext(routeBuilder, routeContext);

            for (var i = 0; i < action.Parameters.Count; i++)
            {
                UpdateBindingInfo(parameterContext, action.Parameters[i]);
            }

            var routeInfo = new ODataAttributeRouteInfo()
            {
                Template      = routeBuilder.BuildPath(includePrefix: true),
                ODataTemplate = parameterContext.PathTemplate,
            };

            routeInfos.Add(routeInfo);
        }
        static void UpdateBindingInfo(
            ControllerActionDescriptor action,
            ODataRouteMapping mapping,
            ICollection <ODataAttributeRouteInfo> routeInfos)
        {
            string template;
            string path;

            switch (action.ActionName)
            {
            case nameof(MetadataController.GetMetadata):
            case nameof(VersionedMetadataController.GetOptions):
                path = "$metadata";

                if (string.IsNullOrEmpty(mapping.RoutePrefix))
                {
                    template = path;
                }
                else
                {
                    template = mapping.RoutePrefix + '/' + path;
                }

                break;

            default:
                path     = "/";
                template = string.IsNullOrEmpty(mapping.RoutePrefix) ? path : mapping.RoutePrefix;
                break;
            }

            var handler   = mapping.Services.GetRequiredService <IODataPathTemplateHandler>();
            var routeInfo = new ODataAttributeRouteInfo()
            {
                Name          = mapping.RouteName,
                Template      = template,
                ODataTemplate = handler.ParseTemplate(path, mapping.Services),
                RoutePrefix   = mapping.RoutePrefix,
            };

            routeInfos.Add(routeInfo);
        }
        void UpdateBindingInfo(ControllerActionDescriptor action, ODataRouteMapping mapping, ICollection <ODataAttributeRouteInfo> routeInfos)
        {
            Contract.Requires(action != null);
            Contract.Requires(mapping != null);
            Contract.Requires(routeInfos != null);

            var routeContext     = new ODataRouteBuilderContext(mapping, action, Options);
            var routeBuilder     = new ODataRouteBuilder(routeContext);
            var parameterContext = new ActionParameterContext(routeBuilder, routeContext);

            foreach (var parameter in action.Parameters)
            {
                UpdateBindingInfo(parameterContext, parameter);
            }

            var routeInfo = new ODataAttributeRouteInfo()
            {
                Template      = routeBuilder.BuildPath(includePrefix: true),
                ODataTemplate = parameterContext.PathTemplate,
            };

            routeInfos.Add(routeInfo);
        }