Beispiel #1
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));
        }
        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);
        }