Exemple #1
0
        /// <summary>
        ///		Does the specified URI represent a template?
        /// </summary>
        /// <param name="uri">
        ///		The URI.
        /// </param>
        /// <returns>
        ///		<c>true</c>, if any of the URI's components are parameterised (i.e. have non-constant values); otherwise, <c>false</c>.
        /// </returns>
        public static bool IsTemplate(string uri)
        {
            if (uri == null)
            {
                throw new ArgumentNullException(nameof(uri));
            }

            IReadOnlyList <TemplateSegment> templateSegments = TemplateSegment.Parse(uri);

            return(templateSegments.Any(segment => segment.IsParameterized));
        }
        public void Can_Parse_TemplateSegments_From_Uri_WithQuery()
        {
            IReadOnlyList <TemplateSegment> segments = TemplateSegment.Parse(
                "api/{controller}/{action}/{id?}/properties?propertyIds={propertyGroupIds}&diddly={dee?}&foo=bar"
                );

            Assert.Equal(9, segments.Count);
            Assert.IsAssignableFrom <RootUriSegment>(segments[0]);

            LiteralUriSegment apiSegment = Assert.IsAssignableFrom <LiteralUriSegment>(segments[1]);

            Assert.Equal("api", apiSegment.Value);

            ParameterizedUriSegment controllerSegment = Assert.IsAssignableFrom <ParameterizedUriSegment>(segments[2]);

            Assert.True(controllerSegment.IsDirectory);
            Assert.Equal("controller", controllerSegment.TemplateParameterName);
            Assert.False(controllerSegment.IsOptional);

            ParameterizedUriSegment actionSegment = Assert.IsAssignableFrom <ParameterizedUriSegment>(segments[3]);

            Assert.True(actionSegment.IsDirectory);
            Assert.Equal("action", actionSegment.TemplateParameterName);
            Assert.False(actionSegment.IsOptional);

            ParameterizedUriSegment idSegment = Assert.IsAssignableFrom <ParameterizedUriSegment>(segments[4]);

            Assert.True(idSegment.IsDirectory);
            Assert.Equal("id", idSegment.TemplateParameterName);
            Assert.True(idSegment.IsOptional);

            LiteralUriSegment propertiesSegment = Assert.IsAssignableFrom <LiteralUriSegment>(segments[5]);

            Assert.False(propertiesSegment.IsDirectory);
            Assert.Equal("properties", propertiesSegment.Value);

            ParameterizedQuerySegment propertyIdsSegment = Assert.IsAssignableFrom <ParameterizedQuerySegment>(segments[6]);

            Assert.Equal("propertyIds", propertyIdsSegment.QueryParameterName);
            Assert.Equal("propertyGroupIds", propertyIdsSegment.TemplateParameterName);
            Assert.False(propertyIdsSegment.IsOptional);

            ParameterizedQuerySegment diddlySegment = Assert.IsAssignableFrom <ParameterizedQuerySegment>(segments[7]);

            Assert.Equal("diddly", diddlySegment.QueryParameterName);
            Assert.Equal("dee", diddlySegment.TemplateParameterName);
            Assert.True(diddlySegment.IsOptional);

            LiteralQuerySegment fooSegment = Assert.IsAssignableFrom <LiteralQuerySegment>(segments[8]);

            Assert.Equal("foo", fooSegment.QueryParameterName);
            Assert.Equal("bar", fooSegment.QueryParameterValue);
        }
Exemple #3
0
        /// <summary>
        ///		Create a new URI template.
        /// </summary>
        /// <param name="template">
        ///		The template.
        /// </param>
        public UriTemplate(string template)
        {
            if (String.IsNullOrWhiteSpace(template))
            {
                throw new ArgumentException("Argument cannot be null, empty, or composed entirely of whitespace: 'template'.", nameof(template));
            }

            _template = template;

            IReadOnlyList <TemplateSegment> templateSegments = TemplateSegment.Parse(_template);

            _uriSegments = templateSegments.OfType <UriSegment>().ToArray();
            if (_uriSegments.Count == 0)
            {
                throw new UriTemplateException("Invalid URI template (contains no path segments).");
            }

            _querySegments = templateSegments.OfType <QuerySegment>().ToArray();
        }
        public void Can_Parse_TemplateSegments_From_Uri()
        {
            IReadOnlyList <TemplateSegment> segments = TemplateSegment.Parse(
                "api/{controller}/{action}/{id?}/properties"
                );

            Assert.Equal(6, segments.Count);
            Assert.IsAssignableFrom <RootUriSegment>(segments[0]);

            LiteralUriSegment apiSegment = Assert.IsAssignableFrom <LiteralUriSegment>(segments[1]);

            Assert.Equal("api", apiSegment.Value);

            ParameterizedUriSegment controllerSegment = Assert.IsAssignableFrom <ParameterizedUriSegment>(segments[2]);

            Assert.True(controllerSegment.IsDirectory);
            Assert.Equal("controller", controllerSegment.TemplateParameterName);
            Assert.False(controllerSegment.IsOptional);

            ParameterizedUriSegment actionSegment = Assert.IsAssignableFrom <ParameterizedUriSegment>(segments[3]);

            Assert.True(actionSegment.IsDirectory);
            Assert.Equal("action", actionSegment.TemplateParameterName);
            Assert.False(actionSegment.IsOptional);

            ParameterizedUriSegment idSegment = Assert.IsAssignableFrom <ParameterizedUriSegment>(segments[4]);

            Assert.True(idSegment.IsDirectory);
            Assert.Equal("id", idSegment.TemplateParameterName);
            Assert.True(idSegment.IsOptional);

            LiteralUriSegment propertiesSegment = Assert.IsAssignableFrom <LiteralUriSegment>(segments[5]);

            Assert.False(propertiesSegment.IsDirectory);
            Assert.Equal("properties", propertiesSegment.Value);
        }