public override IValueProvider GetValueProvider(ControllerContext controllerContext) { if (controllerContext == null) { throw new ArgumentNullException("controllerContext"); } if ((!controllerContext.HttpContext.Request.ContentType.StartsWith("application/json", StringComparison.OrdinalIgnoreCase)) && (!controllerContext.HttpContext.Request.ContentType.StartsWith("application/x-www-form-urlencoded", StringComparison.OrdinalIgnoreCase))) { return(null); } var reader = new StreamReader(controllerContext.HttpContext.Request.InputStream); var bodyText = reader.ReadToEnd(); if (controllerContext.HttpContext.Request.ContentType.StartsWith("application/x-www-form-urlencoded", StringComparison.OrdinalIgnoreCase)) { bodyText = JsonConvert.SerializeObject(QueryStringHelper.QueryStringToDict(bodyText)); } var result = !String.IsNullOrEmpty(bodyText) ? new DictionaryValueProvider <object>(JsonConvert.DeserializeObject <ExpandoObject>(bodyText, Settings), CultureInfo.CurrentCulture) : null; return(result); }