示例#1
0
 /// <summary>
 /// overrides the default
 /// </summary>
 /// <param name="name"></param>
 /// <returns>the associated decoded value for the specified name</returns>
 public new string this[string name]
 {
     get
     {
         return(HttpUtility.UrlDecode(base[name]));
     }
 }
示例#2
0
        public System.ServiceModel.Channels.Message SerializeReply(MessageVersion messageVersion, object[] parameters, object result)
        {
            Message request = OperationContext.Current.RequestContext.RequestMessage;

            // This code is based on ContentTypeBasedDispatch example in WCF REST Starter Kit Samples
            // It calls either
            HttpRequestMessageProperty prop        = (HttpRequestMessageProperty)request.Properties[HttpRequestMessageProperty.Name];
            NameValueCollection        queryString = HttpUtility.ParseQueryString(prop.QueryString);
            string accepts = prop.Headers[HttpRequestHeader.Accept];

            if (queryString["$format"] != null)
            {
                if (queryString["$format"] == "xml")
                {
                    return(XmlDispatchMessageFormatter.SerializeReply(messageVersion, parameters, result));
                }

                if (queryString["$format"] == "json")
                {
                    return(JsonDispatchMessageFormatter.SerializeReply(messageVersion, parameters, result));
                }
            }
            else if (accepts != null)
            {
                if (accepts.Contains("text/xml") || accepts.Contains("application/xml") || queryString["$format"] == "xml")
                {
                    return(XmlDispatchMessageFormatter.SerializeReply(messageVersion, parameters, result));
                }

                if (accepts.Contains("application/json") || queryString["$format"] == "json")
                {
                    return(JsonDispatchMessageFormatter.SerializeReply(messageVersion, parameters, result));
                }
            }
            else
            {
                string contentType = prop.Headers[HttpRequestHeader.ContentType];
                if (contentType != null)
                {
                    if (contentType.Contains("text/xml") || contentType.Contains("application/xml") || queryString["$format"] == "xml")
                    {
                        return(XmlDispatchMessageFormatter.SerializeReply(messageVersion, parameters, result));
                    }

                    if (contentType.Contains("application/json") || queryString["$format"] == "json")
                    {
                        return(JsonDispatchMessageFormatter.SerializeReply(messageVersion, parameters, result));
                    }
                }
            }

            //Use JSON by default...
            return(JsonDispatchMessageFormatter.SerializeReply(messageVersion, parameters, result));
        }
示例#3
0
        /// <summary>
        /// outputs the querystring object to a string
        /// </summary>
        /// <returns>the encoded querystring as it would appear in a browser</returns>
        public override string ToString()
        {
            var builder = new StringBuilder();

            for (var i = 0; i < base.Keys.Count; i++)
            {
                if (!string.IsNullOrEmpty(base.Keys[i]))
                {
                    foreach (string val in base[base.Keys[i]].Split(','))
                    {
                        builder.Append((builder.Length == 0) ? "?" : "&").Append(HttpUtility.UrlEncodeUnicode(base.Keys[i])).Append("=").Append(val);
                    }
                }
            }
            return(builder.ToString());
        }
        public object ParseQueryString(object query)
        {
            if ((query is string) == false)
            {
                return(Null.Value);
            }

            var result = Engine.Object.Construct();
            var dict   = HttpUtility.ParseQueryString(query as string);

            foreach (var key in dict.AllKeys)
            {
                result.SetPropertyValue(key, dict[key], false);
            }
            return(result);
        }
示例#5
0
        /// <summary>
        /// adds a name value pair to the collection
        /// </summary>
        /// <param name="name">the name</param>
        /// <param name="value">the value associated to the name</param>
        /// <param name="isUnique">true if the name is unique within the querystring. This allows us to override existing values</param>
        /// <returns>the QueryString object </returns>
        public QueryString Add(string name, string value, bool isUnique)
        {
            string existingValue = base[name];

            if (string.IsNullOrEmpty(existingValue))
            {
                base.Add(name, HttpUtility.UrlEncodeUnicode(value));
            }
            else if (isUnique)
            {
                base[name] = HttpUtility.UrlEncodeUnicode(value);
            }
            else
            {
                base[name] += "," + HttpUtility.UrlEncodeUnicode(value);
            }
            return(this);
        }
示例#6
0
        public Uri GetFullUri()
        {
            var parameters = new List <string>();

            if (!FilterParameter.IsNullOrWhiteSpace())
            {
                parameters.Add(BuildParameter(StringConstants.FilterParameter, HttpUtility.UrlEncode(FilterParameter)));
            }

            if (!SelectParameter.IsNullOrWhiteSpace())
            {
                parameters.Add(BuildParameter(StringConstants.SelectParameter, SelectParameter));
            }

            if (!SkipParameter.IsNullOrWhiteSpace())
            {
                parameters.Add(BuildParameter(StringConstants.SkipParameter, SkipParameter));
            }

            if (!TakeParameter.IsNullOrWhiteSpace())
            {
                parameters.Add(BuildParameter(StringConstants.TopParameter, TakeParameter));
            }

            if (OrderByParameter.Any())
            {
                parameters.Add(BuildParameter(StringConstants.OrderByParameter, OrderByParameter.Join(",")));
            }

            if (!ExpandParameter.IsNullOrWhiteSpace())
            {
                parameters.Add(BuildParameter(StringConstants.ExpandParameter, ExpandParameter));
            }

            var builder = new UriBuilder(m_serviceBase);

            builder.Query = (string.IsNullOrEmpty(builder.Query) ? string.Empty : "&") + parameters.Join("&");

            var resultUri = builder.Uri;

            return(resultUri);
        }