Exemplo n.º 1
0
        /// <summary>
        /// Creates a <see cref="RoutePatternParameterPart"/> from the provided parameter name
        /// and default value, parameter kind, and parameter policies.
        /// </summary>
        /// <param name="parameterName">The parameter name.</param>
        /// <param name="default">The parameter default value. May be <c>null</c>.</param>
        /// <param name="parameterKind">The parameter kind.</param>
        /// <param name="parameterPolicies">The parameter policies to associated with the parameter.</param>
        /// <returns>The <see cref="RoutePatternParameterPart"/>.</returns>
        public static RoutePatternParameterPart ParameterPart(
            string parameterName,
            object @default,
            RoutePatternParameterKind parameterKind,
            params RoutePatternParameterPolicyReference[] parameterPolicies)
        {
            if (string.IsNullOrEmpty(parameterName))
            {
                throw new ArgumentException("Value cannot be null or empty.", nameof(parameterName));
            }

            if (parameterName.IndexOfAny(RoutePatternParser.InvalidParameterNameChars) >= 0)
            {
                throw new ArgumentException($"The route parameter name '{parameterName}' is invalid. Route parameter names must be non-empty and cannot contain these characters: '{{', '}}', '/'. The '?' character marks a parameter as optional, and can occur only at the end of the parameter. The '*' character marks a parameter as catch-all, and can occur only at the start of the parameter.");
            }

            if (@default != null && parameterKind == RoutePatternParameterKind.Optional)
            {
                throw new ArgumentNullException("An optional parameter cannot have default value.", nameof(parameterKind));
            }

            if (parameterPolicies == null)
            {
                throw new ArgumentNullException(nameof(parameterPolicies));
            }

            return(ParameterPartCore(
                       parameterName: parameterName,
                       @default: @default,
                       parameterKind: parameterKind,
                       parameterPolicies: (RoutePatternParameterPolicyReference[])parameterPolicies.Clone()));
        }
Exemplo n.º 2
0
        /// <summary>
        /// Creates a <see cref="RoutePatternParameterPart"/> from the provided parameter name
        /// and default value, parameter kind, and parameter policies.
        /// </summary>
        /// <param name="parameterName">The parameter name.</param>
        /// <param name="default">The parameter default value. May be <c>null</c>.</param>
        /// <param name="parameterKind">The parameter kind.</param>
        /// <param name="parameterPolicies">The parameter policies to associated with the parameter.</param>
        /// <returns>The <see cref="RoutePatternParameterPart"/>.</returns>
        public static RoutePatternParameterPart ParameterPart(
            string parameterName,
            object? @default,
            RoutePatternParameterKind parameterKind,
            params RoutePatternParameterPolicyReference[] parameterPolicies)
        {
            if (string.IsNullOrEmpty(parameterName))
            {
                throw new ArgumentException(Resources.Argument_NullOrEmpty, nameof(parameterName));
            }

            if (parameterName.IndexOfAny(RoutePatternParser.InvalidParameterNameChars) >= 0)
            {
                throw new ArgumentException(Resources.FormatTemplateRoute_InvalidParameterName(parameterName));
            }

            if (@default != null && parameterKind == RoutePatternParameterKind.Optional)
            {
                throw new ArgumentNullException(Resources.TemplateRoute_OptionalCannotHaveDefaultValue, nameof(parameterKind));
            }

            if (parameterPolicies == null)
            {
                throw new ArgumentNullException(nameof(parameterPolicies));
            }

            return(ParameterPartCore(
                       parameterName: parameterName,
                       @default: @default,
                       parameterKind: parameterKind,
                       parameterPolicies: (RoutePatternParameterPolicyReference[])parameterPolicies.Clone()));
        }
Exemplo n.º 3
0
        /// <summary>
        /// Creates a <see cref="RoutePatternParameterPart"/> from the provided parameter name
        /// and default value, parameter kind, and constraints.
        /// </summary>
        /// <param name="parameterName">The parameter name.</param>
        /// <param name="default">The parameter default value. May be <c>null</c>.</param>
        /// <param name="parameterKind">The parameter kind.</param>
        /// <param name="constraints">The constraints to associated with the parameter.</param>
        /// <returns>The <see cref="RoutePatternParameterPart"/>.</returns>
        public static RoutePatternParameterPart ParameterPart(
            string parameterName,
            object @default,
            RoutePatternParameterKind parameterKind,
            IEnumerable <RoutePatternConstraintReference> constraints)
        {
            if (string.IsNullOrEmpty(parameterName))
            {
                throw new ArgumentException(Resources.Argument_NullOrEmpty, nameof(parameterName));
            }

            if (parameterName.IndexOfAny(RoutePatternParser.InvalidParameterNameChars) >= 0)
            {
                throw new ArgumentException(Resources.FormatTemplateRoute_InvalidParameterName(parameterName));
            }

            if (@default != null && parameterKind == RoutePatternParameterKind.Optional)
            {
                throw new ArgumentNullException(Resources.TemplateRoute_OptionalCannotHaveDefaultValue, nameof(parameterKind));
            }

            if (constraints == null)
            {
                throw new ArgumentNullException(nameof(constraints));
            }

            return(ParameterPartCore(
                       parameterName: parameterName,
                       @default: @default,
                       parameterKind: parameterKind,
                       constraints: constraints));
        }
 internal RoutePatternParameterPart(
     string parameterName,
     object? @default,
     RoutePatternParameterKind parameterKind,
     RoutePatternParameterPolicyReference[] parameterPolicies)
     : this(parameterName, @default, parameterKind, parameterPolicies, encodeSlashes : true)
 {
 }
Exemplo n.º 5
0
 private static RoutePatternParameterPart ParameterPartCore(
     string parameterName,
     object? @default,
     RoutePatternParameterKind parameterKind,
     RoutePatternParameterPolicyReference[] parameterPolicies)
 {
     return(ParameterPartCore(parameterName, @default, parameterKind, parameterPolicies, encodeSlashes: true));
 }
Exemplo n.º 6
0
 private static RoutePatternParameterPart ParameterPartCore(
     string parameterName,
     object @default,
     RoutePatternParameterKind parameterKind,
     IEnumerable <RoutePatternConstraintReference> constraints)
 {
     return(new RoutePatternParameterPart(parameterName, @default, parameterKind, constraints.ToArray()));
 }
Exemplo n.º 7
0
        internal RoutePatternParameterPart(
            string parameterName,
            object @default,
            RoutePatternParameterKind parameterKind,
            RoutePatternConstraintReference[] constraints)
            : base(RoutePatternPartKind.Parameter)
        {
            // See #475 - this code should have some asserts, but it can't because of the design of RouteParameterParser.

            Name          = parameterName;
            Default       = @default;
            ParameterKind = parameterKind;
            Constraints   = constraints;
        }
    internal RoutePatternParameterPart(
        string parameterName,
        object? @default,
        RoutePatternParameterKind parameterKind,
        RoutePatternParameterPolicyReference[] parameterPolicies,
        bool encodeSlashes)
        : base(RoutePatternPartKind.Parameter)
    {
        // See #475 - this code should have some asserts, but it can't because of the design of RouteParameterParser.

        Name              = parameterName;
        Default           = @default;
        ParameterKind     = parameterKind;
        ParameterPolicies = parameterPolicies;
        EncodeSlashes     = encodeSlashes;
    }
Exemplo n.º 9
0
        internal RoutePatternParameter(
            string rawText,
            string name,
            object defaultValue,
            RoutePatternParameterKind parameterKind,
            ConstraintReference[] constraints)
        {
            // See #475 - this code should have some asserts, but it can't because of the design of InlineRouteParameterParser.

            RawText       = rawText;
            Name          = name;
            DefaultValue  = defaultValue;
            ParameterKind = parameterKind;
            Constraints   = constraints;

            PartKind = RoutePatternPartKind.Parameter;
        }
Exemplo n.º 10
0
        public static RoutePatternParameter CreateParameter(
            string name,
            object defaultValue,
            RoutePatternParameterKind parameterKind)
        {
            if (string.IsNullOrEmpty(name))
            {
                throw new ArgumentException(Resources.Argument_NullOrEmpty, nameof(name));
            }

            if (name.IndexOfAny(RoutePatternParser.InvalidParameterNameChars) >= 0)
            {
                throw new ArgumentException(Resources.FormatTemplateRoute_InvalidParameterName(name));
            }

            if (defaultValue != null && parameterKind == RoutePatternParameterKind.Optional)
            {
                throw new ArgumentNullException(Resources.TemplateRoute_OptionalCannotHaveDefaultValue, nameof(parameterKind));
            }

            return CreateParameterFromText(null, name, defaultValue, parameterKind, Array.Empty<ConstraintReference>());
        }