Ejemplo n.º 1
0
        static async Task RunAsync()
        {
            using (HttpClient client = new HttpClient())
            {
                client.BaseAddress = new Uri("http://localhost:59241");
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/bson"));

                #region get
                var result = await client.GetAsync("api/books/1");

                try
                {
                    result.EnsureSuccessStatusCode();
                }
                catch (Exception ex)
                {
                    string s = ex.Message;
                }

                System.Net.Http.Formatting.MediaTypeFormatter[] formatters = new System.Net.Http.Formatting.MediaTypeFormatter[] {
                    new System.Net.Http.Formatting.BsonMediaTypeFormatter()
                };
                var book = await result.Content.ReadAsAsync <Book>(formatters);

                #endregion
                var book2 = new Book {
                    AuthorID = 1,
                    Title    = "tutu",
                };

                System.Net.Http.Formatting.BsonMediaTypeFormatter typeFormatter = new System.Net.Http.Formatting.BsonMediaTypeFormatter();
                var result2 = await client.PostAsync("api/books", book2, typeFormatter);

                result2.EnsureSuccessStatusCode();
            }
        }
Ejemplo n.º 2
0
        protected internal virtual System.Net.Http.Formatting.MediaTypeFormatter GetMediaTypeFormatter(MediaType mediaType, params string[] supportedMediaTypes)
        {
            var rr = getMediaTypeFormatterFunc?.Invoke(mediaType, supportedMediaTypes);

            if (rr != null)
            {
                return(rr);
            }


            //bool setPropertySettingsFromAttributes = true, isContractNHibernateProxy = false;
            System.Net.Http.Formatting.MediaTypeFormatter formatter = null;
            switch (mediaType)
            {
            case MediaType.Json:
                formatter = new System.Net.Http.Formatting.JsonMediaTypeFormatter
                {
                    Indent             = true,
                    SerializerSettings = new Newtonsoft.Json.JsonSerializerSettings
                    {
                        Formatting                 = Newtonsoft.Json.Formatting.Indented,              //是否格式化缩进
                        NullValueHandling          = Newtonsoft.Json.NullValueHandling.Ignore,         //空值忽略
                        DefaultValueHandling       = Newtonsoft.Json.DefaultValueHandling.Include,     //序列化和反序列化时,包含默认值
                        ReferenceLoopHandling      = Newtonsoft.Json.ReferenceLoopHandling.Ignore,     //避免循环引用
                        PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.None,  //序列化时保留引用。
                        DateTimeZoneHandling       = Newtonsoft.Json.DateTimeZoneHandling.Utc,         //将所有日期转换成UTC格式
                        DateFormatHandling         = Newtonsoft.Json.DateFormatHandling.IsoDateFormat, //JSON日期格式
                        Converters                 = new Newtonsoft.Json.JsonConverter[] {
                            //new CamelCasePropertyNamesContractResolver(),//驼峰式大小写转换
                            new Newtonsoft.Json.Converters.StringEnumConverter(),    //枚举转换成枚举名称字符串
                            //new Orchard.Utility.Json.LocalDateTimeConverter(),
                            //new Orchard.Utility.Json.InterfaceConverter(),
                            new Utilities.ExpandoObject2.Converters.ExpandoObject2Converter(),
                            new Utilities.ExpandoObject2.Converters.DynamicJsonConverter(),
                            //////new Newtonsoft.Json.Converters.MicrosoftJavaScriptDateTimeConverter(),
                            //new TimestampConverter()
                            //new Orchard.Utility.Json.NHibernateProxyConverter(isContractNHibernateProxy),
                            //new Orchard.Utility.Json.EncodeNHibernateContractResolver(setPropertySettingsFromAttributes, isContractNHibernateProxy)
                        },
                        Error = (currentObject, errorContext) =>
                        {
                        }
                    }
                };
                this.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
                break;

            case MediaType.Xml:
                formatter = new System.Net.Http.Formatting.XmlMediaTypeFormatter {
                    Indent = true, UseXmlSerializer = true
                };
                this.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/xml"));
                break;

            case MediaType.Bson:
                formatter = new System.Net.Http.Formatting.BsonMediaTypeFormatter {
                };
                break;

            default:
                break;
            }
            foreach (var item in supportedMediaTypes ?? new string[] { })
            {
                try
                {
                    formatter.SupportedMediaTypes.Add(new System.Net.Http.Headers.MediaTypeHeaderValue(item));
                    //formatter.SupportedMediaTypes.Add(new System.Net.Http.Headers.MediaTypeHeaderValue("text/html"));
                }
                catch (Exception)
                {
                    //    throw;
                }
            }
            return(formatter);
        }