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