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