/// <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())); }
/// <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())); }
/// <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) { }
private static RoutePatternParameterPart ParameterPartCore( string parameterName, object? @default, RoutePatternParameterKind parameterKind, RoutePatternParameterPolicyReference[] parameterPolicies) { return(ParameterPartCore(parameterName, @default, parameterKind, parameterPolicies, encodeSlashes: true)); }
private static RoutePatternParameterPart ParameterPartCore( string parameterName, object @default, RoutePatternParameterKind parameterKind, IEnumerable <RoutePatternConstraintReference> constraints) { return(new RoutePatternParameterPart(parameterName, @default, parameterKind, constraints.ToArray())); }
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; }
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; }
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>()); }