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()); }
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()); }