Example #1
0
            private string AsRegularExpresion()
            {
                StringBuilder fixedParameters    = new StringBuilder(128);
                int           optionalParameters = 0;

                foreach (var parameter in this)
                {
                    optionalParameters += ((parameter.HasDefaultValue) || (!((ParameterInfo)parameter.Member).ParameterType.IsValueType) ? 1 : 0);
                    var match         = VariableTemplateRegex.Match(((FromQueryStringAttribute)parameter.Source).UrlTemplate);
                    var parameterName = match.Groups["ParameterName"].Value;
                    fixedParameters.Append(fixedParameters.Length == 0 ? "([?&](" : "|");
                    fixedParameters.Append(Regex.Escape(parameterName));
                }

                if (fixedParameters.Length > 0)
                {
                    fixedParameters.AppendFormat(")=[^&]{0}){1}", (optionalParameters == 0 ? "+" : "*"), (optionalParameters == 0 ? "{1,}" : "{0,}"));
                }

                return(fixedParameters.ToString());
            }
Example #2
0
            private string AsUrlTemplate()
            {
                StringBuilder fixedParameters    = new StringBuilder(128);
                StringBuilder optionalParameters = new StringBuilder(128);

                foreach (var parameter in this)
                {
                    var match         = VariableTemplateRegex.Match(((FromQueryStringAttribute)parameter.Source).UrlTemplate);
                    var parameterName = match.Groups["ParameterName"].Value;
                    if ((parameter.HasDefaultValue) || (!((ParameterInfo)parameter.Member).ParameterType.IsValueType))
                    {
                        optionalParameters.Append(optionalParameters.Length == 0 ? "{&" : ",");
                        optionalParameters.Append(parameterName + match.Groups["ListIndicator"].Value);
                    }
                    else
                    {
                        fixedParameters.Append("&");
                        fixedParameters.AppendFormat("{0}={{{0}}}", parameterName);
                    }
                }

                if (optionalParameters.Length > 0)
                {
                    optionalParameters.Append("}");
                }

                if (fixedParameters.Length > 0)
                {
                    fixedParameters.Remove(0, 1).Insert(0, "?");
                }
                else if (optionalParameters.Length > 0)
                {
                    optionalParameters.Remove(1, 1).Insert(1, "?");
                }

                return(fixedParameters.Append(optionalParameters).ToString());
            }