ODataPathTemplate GetODataPathTemplate(string prefix, string pathTemplate, IServiceProvider serviceProvider, string controllerName, string actionName)
        {
            if (prefix != null && !pathTemplate.StartsWith("/", Ordinal))
            {
                if (string.IsNullOrEmpty(pathTemplate))
                {
                    pathTemplate = prefix;
                }
                else if (pathTemplate.StartsWith("(", Ordinal))
                {
                    pathTemplate = prefix + pathTemplate;
                }
                else
                {
                    pathTemplate = prefix + "/" + pathTemplate;
                }
            }

            if (pathTemplate.StartsWith("/", Ordinal))
            {
                pathTemplate = pathTemplate.Substring(1);
            }

            try
            {
                return(ODataPathTemplateHandler.ParseTemplate(pathTemplate, serviceProvider));
            }
            catch (ODataException e)
            {
                throw new InvalidOperationException(SR.InvalidODataRouteOnAction.FormatDefault(pathTemplate, actionName, controllerName, e.Message));
            }
        }
Ejemplo n.º 2
0
        private ODataPathTemplate GetODataPathTemplate(string prefix, string pathTemplate, HttpActionDescriptor action)
        {
            if (prefix != null && !pathTemplate.StartsWith("/", StringComparison.Ordinal))
            {
                if (String.IsNullOrEmpty(pathTemplate))
                {
                    pathTemplate = prefix;
                }
                else
                {
                    pathTemplate = prefix + "/" + pathTemplate;
                }
            }

            if (pathTemplate.StartsWith("/", StringComparison.Ordinal))
            {
                pathTemplate = pathTemplate.Substring(1);
            }

            ODataPathTemplate odataPathTemplate = null;

            try
            {
                odataPathTemplate = ODataPathTemplateHandler.ParseTemplate(Model, pathTemplate);
            }
            catch (ODataException e)
            {
                throw Error.InvalidOperation(SRResources.InvalidODataRouteOnAction, pathTemplate, action.ActionName,
                                             action.ControllerDescriptor.ControllerName, e.Message);
            }

            return(odataPathTemplate);
        }
Ejemplo n.º 3
0
        private ODataPathTemplate GetODataPathTemplate(RouteContext context, string prefix, string pathTemplate, ControllerActionDescriptor action, IEdmModel model)
        {
            if (string.IsNullOrEmpty(prefix))
            {
                var parametetrs = string.Join(
                    ", ",
                    action.Parameters.Select(p => $"{p.Name}={{{p.Name}}}"));
                prefix = $"{action.ActionName}({parametetrs})";
            }
            if (!pathTemplate.StartsWith("/", StringComparison.Ordinal))
            {
                if (String.IsNullOrEmpty(pathTemplate))
                {
                    pathTemplate = prefix;
                }
                else if (pathTemplate.StartsWith("(", StringComparison.Ordinal))
                {
                    // We don't need '/' when the pathTemplate starts with a key segment.
                    pathTemplate = prefix + pathTemplate;
                }
                else
                {
                    pathTemplate = prefix + "/" + pathTemplate;
                }
            }

            if (pathTemplate.StartsWith("/", StringComparison.Ordinal))
            {
                pathTemplate = pathTemplate.Substring(1);
            }

            ODataPathTemplate odataPathTemplate;

            try
            {
                //IEdmModel model = new EdmModel(); // TODO:
                odataPathTemplate = ODataPathTemplateHandler.ParseTemplate(model, pathTemplate, context.HttpContext.ODataFeature().UriResolverSettings);
            }
            catch (ODataException e)
            {
                /*
                 * throw Error.InvalidOperation(SRResources.InvalidODataRouteOnAction, pathTemplate, action.ActionName,
                 *  action.ControllerDescriptor.ControllerName, e.Message);*/
                // TODO:
                return(null);
            }

            return(odataPathTemplate);
        }
Ejemplo n.º 4
0
        private ODataPathTemplate GetODataPathTemplate(string prefix, string pathTemplate, ControllerActionDescriptor action, IEdmModel model)
        {
            if (prefix != null && !pathTemplate.StartsWith("/", StringComparison.Ordinal))
            {
                if (String.IsNullOrEmpty(pathTemplate))
                {
                    pathTemplate = prefix;
                }
                else if (pathTemplate.StartsWith("(", StringComparison.Ordinal))
                {
                    // We don't need '/' when the pathTemplate starts with a key segment.
                    pathTemplate = prefix + pathTemplate;
                }
                else
                {
                    pathTemplate = prefix + "/" + pathTemplate;
                }
            }

            if (pathTemplate.StartsWith("/", StringComparison.Ordinal))
            {
                pathTemplate = pathTemplate.Substring(1);
            }

            ODataPathTemplate odataPathTemplate;

            try
            {
                //IEdmModel model = new EdmModel(); // TODO:
                odataPathTemplate = ODataPathTemplateHandler.ParseTemplate(model, pathTemplate);
            }
            catch (ODataException e)
            {
                /*
                 * throw Error.InvalidOperation(SRResources.InvalidODataRouteOnAction, pathTemplate, action.ActionName,
                 *  action.ControllerDescriptor.ControllerName, e.Message);*/
                // TODO:
                return(null);
            }

            return(odataPathTemplate);
        }
        private ODataPathTemplate GetODataPathTemplate(string prefix, string pathTemplate, HttpActionDescriptor action)
        {
            if (prefix != null && !pathTemplate.StartsWith("/", StringComparison.Ordinal))
            {
                if (String.IsNullOrEmpty(pathTemplate))
                {
                    pathTemplate = prefix;
                }
                else if (pathTemplate.StartsWith("(", StringComparison.Ordinal))
                {
                    // We don't need '/' when the pathTemplate starts with a key segment.
                    pathTemplate = prefix + pathTemplate;
                }
                else
                {
                    pathTemplate = prefix + "/" + pathTemplate;
                }
            }

            if (pathTemplate.StartsWith("/", StringComparison.Ordinal))
            {
                pathTemplate = pathTemplate.Substring(1);
            }

            ODataPathTemplate odataPathTemplate;

            try
            {
                // We are NOT in a request but establishing the attribute routing convention.
                // So use the root container rather than the request container.
                odataPathTemplate = ODataPathTemplateHandler.ParseTemplate(pathTemplate,
                                                                           action.Configuration.GetODataRootContainer(_routeName));
            }
            catch (ODataException e)
            {
                throw Error.InvalidOperation(SRResources.InvalidODataRouteOnAction, pathTemplate, action.ActionName,
                                             action.ControllerDescriptor.ControllerName, e.Message);
            }

            return(odataPathTemplate);
        }
        ODataPathTemplate GetODataPathTemplate(string prefix, string pathTemplate, HttpActionDescriptor action)
        {
            Contract.Requires(pathTemplate != null);
            Contract.Requires(action != null);
            Contract.Ensures(Contract.Result <ODataPathTemplate>() != null);

            if (prefix != null && !pathTemplate.StartsWith("/", StringComparison.Ordinal))
            {
                if (string.IsNullOrEmpty(pathTemplate))
                {
                    pathTemplate = prefix;
                }
                else if (pathTemplate.StartsWith("(", StringComparison.Ordinal))
                {
                    pathTemplate = prefix + pathTemplate;
                }
                else
                {
                    pathTemplate = prefix + "/" + pathTemplate;
                }
            }

            if (pathTemplate.StartsWith("/", StringComparison.Ordinal))
            {
                pathTemplate = pathTemplate.Substring(1);
            }

            var odataPathTemplate = default(ODataPathTemplate);

            try
            {
                odataPathTemplate = ODataPathTemplateHandler.ParseTemplate(pathTemplate, action.Configuration.GetODataRootContainer(routeName));
            }
            catch (ODataException e)
            {
                throw new InvalidOperationException(SR.InvalidODataRouteOnAction.FormatDefault(pathTemplate, action.ActionName, action.ControllerDescriptor.ControllerName, e.Message));
            }

            return(odataPathTemplate);
        }