private byte[] BuildRequestData(string path, IDictionary <string, object> parameters, HttpMethod method, out Uri requestUrl, out string contentType) { parameters = parameters ?? new Dictionary <string, object>(); path = FacebookUtils.ParseQueryParametersToDictionary(path, parameters); Uri baseUrl; if (parameters.ContainsKey("method")) { if (String.IsNullOrEmpty((string)parameters["method"])) { throw new ArgumentException("You must specify a value for the method parameter."); } // Set the format to json parameters["format"] = "json-strings"; baseUrl = GetApiUrl(parameters["method"].ToString()); } else { if (!String.IsNullOrEmpty(path) && path.StartsWith("/", StringComparison.Ordinal)) { path = path.Substring(1, path.Length - 1); } baseUrl = GetUrl("graph", path); } return(BuildRequestData(baseUrl, parameters, method, out requestUrl, out contentType)); }
/// <summary> /// Converts the facebook batch to POST parameters. /// </summary> /// <param name="batchParameter"> /// The batch parameter. /// </param> /// <returns> /// The post parameters. /// </returns> protected IDictionary <string, object> ToParameters(FacebookBatchParameter batchParameter) { Contract.Requires(batchParameter != null); Contract.Ensures(Contract.Result <IDictionary <string, object> >() != null); IDictionary <string, object> returnResult = null; var defaultParameters = new Dictionary <string, object>(); defaultParameters["method"] = FacebookUtils.ConvertToString(batchParameter.HttpMethod); IDictionary <string, object> parameters = null; if (batchParameter.Parameters == null) { parameters = new Dictionary <string, object>(); } else { if (batchParameter.Parameters is IDictionary <string, object> ) { parameters = (IDictionary <string, object>)batchParameter.Parameters; } else { parameters = FacebookUtils.ToDictionary(batchParameter.Parameters); } } var path = FacebookUtils.ParseQueryParametersToDictionary(batchParameter.Path, parameters); string queryString = string.Empty; if (batchParameter.HttpMethod == HttpMethod.Get) { queryString = FacebookUtils.ToJsonQueryString(parameters); } else { defaultParameters["body"] = FacebookUtils.ToJsonQueryString(parameters); } var relativeUrl = new StringBuilder(path); if (!string.IsNullOrEmpty(queryString)) { relativeUrl.AppendFormat("?{0}", queryString); } defaultParameters["relative_url"] = relativeUrl.ToString(); var data = batchParameter.Data; if (data == null) { returnResult = defaultParameters; } else { if (!(data is IDictionary <string, object>)) { data = FacebookUtils.ToDictionary(batchParameter.Data); } returnResult = FacebookUtils.Merge(defaultParameters, (IDictionary <string, object>)data); } return(returnResult); }