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