示例#1
0
        private T SendCommand <T>(Uri endpoint, object payload = null) where T : class
        {
            var httpWebRequest = (HttpWebRequest)WebRequest.Create(endpoint);

            httpWebRequest.ContentType = "application/json";
            httpWebRequest.Method      = "POST";
            httpWebRequest.Accept      = "application/json";
            httpWebRequest.Headers.Add(ServerConfiguration.Headers.Version, (typeof(ServerChannel).Assembly.GetName().Version.ToString()));
            httpWebRequest.Headers.Add(ServerConfiguration.Headers.WorkerRegistrationToken, Token.HasValue?Token.ToString():"");

            using (var writer = new StreamWriter(httpWebRequest.GetRequestStream()))
            {
                writer.Write(JsonNetHelper.Serialize(payload));
            }
            using (var reader = new StreamReader(httpWebRequest.GetResponse().GetResponseStream()))
            {
                var body = reader.ReadToEnd();
                try
                {
                    return(JsonNetHelper.Deserialize <T>(body));
                }
                catch (JsonException ex)
                {
                    Logger.Error(ex);
                    Logger.Error(body);
                    throw;
                }
            }
        }
        public override IValueProvider GetValueProvider(ControllerContext controllerContext)
        {
            // first make sure we have a valid context
            if (controllerContext == null)
            {
                throw new ArgumentNullException("controllerContext");
            }

            // now make sure we are dealing with a json request
            if (
                !controllerContext.HttpContext.Request.ContentType.StartsWith("application/json",
                                                                              StringComparison.OrdinalIgnoreCase))
            {
                return(null);
            }

            // get a generic stream reader (get reader for the http stream)
            object jsonObject;

            using (var streamReader = new StreamReader(controllerContext.HttpContext.Request.InputStream))
            {
                using (var JSONReader = new JsonTextReader(streamReader))
                {
                    if (!JSONReader.Read())
                    {
                        return(null);
                    }

                    // make a new Json serializer
                    //var JSONSerializer = JsonNetHelper.CreateDefault(JsonNetHelper.GetSerializerSettings());
                    //// add the dyamic object converter to our serializer
                    //JSONSerializer.Converters.Add(new ExpandoObjectConverter());

                    // use JSON.NET to deserialize object to a dynamic (expando) object
                    // if we start with a "[", treat this as an array
                    if (JSONReader.TokenType == JsonToken.StartArray)
                    {
                        jsonObject = JsonNetHelper.Deserialize <List <ExpandoObject> >(JSONReader.ReadAsString());
                    }
                    else
                    {
                        jsonObject = JsonNetHelper.Deserialize <ExpandoObject>(JSONReader.ReadAsString());
                    }
                }
            }

            // create a backing store to hold all properties for this deserialization
            var backingStore = new Dictionary <string, object>(StringComparer.OrdinalIgnoreCase);

            // add all properties to this backing store
            AddToBackingStore(backingStore, String.Empty, jsonObject);
            // return the object in a dictionary value provider so the MVC understands it
            return(new DictionaryValueProvider <object>(backingStore, CultureInfo.CurrentCulture));
        }
示例#3
0
 public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
 {
     if (
         !controllerContext.HttpContext.Request.ContentType.StartsWith("application/json",
                                                                       StringComparison.OrdinalIgnoreCase))
     {
         return(_defaultModelBinder.BindModel(controllerContext, bindingContext));
     }
     controllerContext.HttpContext.Request.InputStream.Position = 0;
     using (var streamReader = new StreamReader(controllerContext.HttpContext.Request.InputStream))
     {
         var json = streamReader.ReadToEnd();
         Log.Info("Json " + json);
         return(JsonNetHelper.Deserialize(json));
     }
 }
示例#4
0
        public static T SendRequest <T>(Uri endpoint, object payload = null) where T : class
        {
            var httpWebRequest = (HttpWebRequest)WebRequest.Create(endpoint);

            httpWebRequest.ContentType = "application/json";
            httpWebRequest.Method      = "POST";
            httpWebRequest.Accept      = "application/json";
            httpWebRequest.Headers.Add(ServerConfiguration.Headers.Version, typeof(Program).Assembly.GetName().Version.ToString());

            using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
            {
                streamWriter.Write(JsonNetHelper.Serialize(payload));
                streamWriter.Flush();
                streamWriter.Close();

                var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
                using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
                {
                    var result = streamReader.ReadToEnd();
                    return(JsonNetHelper.Deserialize <T>(result));
                }
            }
        }