using System; using System.Collections.Generic; using System.Linq; using System.Net.Http.Json; using System.Security.Cryptography.Xml; using System.Text; using System.Text.Unicode; using System.Threading.Tasks; using HttpClientStudy.Config; using Newtonsoft.Json; namespace HttpClientStudy.UnitTest.HttpClients { /// /// 带请求体的Get请求 测试 /// public class GetWithBodyTest { /// /// 类型化客户端(静态方法) /// public static HttpClient GetHttpClient = new HttpClient() { BaseAddress = new Uri(WebApiConfigManager.GetWebApiConfig().BaseUrl), }; /// /// 测试日志 /// private readonly ITestOutputHelper _logger; /// /// 构造 /// public GetWithBodyTest(ITestOutputHelper outputHelper) { _logger = outputHelper; } #region Get请求中使用请求体:强烈不推荐这种方法 /// /// Get请求中使用请求体 /// 注意:服务器要设置(配置KestrelServerOptions AllowSynchronousIO值为true) /// /// [Fact] public async Task GetWithBody_Test() { var formData = new List> { new KeyValuePair("param1", "value1"), new KeyValuePair("param2", "value2") }; HttpRequestMessage requestMessage = new HttpRequestMessage(HttpMethod.Get, "/api/AdvancedGet/GetWithBody"); requestMessage.Content = new FormUrlEncodedContent(formData); var response = await GetHttpClient.SendAsync(requestMessage); response.EnsureSuccessStatusCode(); var responseText = await response.Content.ReadAsStringAsync(); _logger.WriteLine(responseText); } [Fact] public async Task GetWithFormBody_Test() { var formData = new List> { new KeyValuePair("Id", "1"), new KeyValuePair("Name", "BeiJing") }; HttpRequestMessage requestMessage = new HttpRequestMessage(HttpMethod.Get, "/api/AdvancedGet/GetWithFormBody"); requestMessage.Content = new FormUrlEncodedContent(formData); var response = await GetHttpClient.SendAsync(requestMessage); response.EnsureSuccessStatusCode(); var responseText = await response.Content.ReadAsStringAsync(); _logger.WriteLine(responseText); } [Fact] public async Task GetWithFormBody_MultipartFormData_Test() { var multiFormDataContent = new MultipartFormDataContent(); multiFormDataContent.Add(new StringContent("1", Encoding.UTF8, System.Net.Mime.MediaTypeNames.Multipart.FormData), "Id"); multiFormDataContent.Add(new StringContent("BeiJing", Encoding.UTF8, System.Net.Mime.MediaTypeNames.Multipart.FormData), "Name"); HttpRequestMessage requestMessage = new HttpRequestMessage(HttpMethod.Get, "/api/AdvancedGet/GetWithFormBody"); requestMessage.Content = multiFormDataContent; var response = await GetHttpClient.SendAsync(requestMessage); response.EnsureSuccessStatusCode(); var responseText = await response.Content.ReadAsStringAsync(); _logger.WriteLine(responseText); } [Fact] public async Task GetWithJsonBody_Test() { //因为get方法,不能使用System.Net.Http.Json中的扩展方法 var vm = new AdvancedGetModel() { Id = 3, Name = "张三" }; var content = new StringContent(JsonConvert.SerializeObject(vm), Encoding.UTF8, System.Net.Mime.MediaTypeNames.Application.Json); var requestMessage = new HttpRequestMessage(HttpMethod.Get, "/api/AdvancedGet/GetWithJsonBody") { Content = content, }; var response = await GetHttpClient.SendAsync(requestMessage); response.EnsureSuccessStatusCode(); var responseText = await response.Content.ReadAsStringAsync(); _logger.WriteLine(responseText); } [Fact] public async Task GetWithBodyByCopyStream_Test() { //因为get方法,不能使用System.Net.Http.Json中的扩展方法 var vm = new AdvancedGetModel() { Id = 3, Name = "张三" }; var content = new StringContent(JsonConvert.SerializeObject(vm), Encoding.UTF8, System.Net.Mime.MediaTypeNames.Application.Json); var requestMessage = new HttpRequestMessage(HttpMethod.Get, "/api/AdvancedGet/GetWithBodyByCopyStream") { Content = content, }; var response = await GetHttpClient.SendAsync(requestMessage); response.EnsureSuccessStatusCode(); var responseText = await response.Content.ReadAsStringAsync(); _logger.WriteLine(responseText); } [Fact] public async Task GetWithBodyByEnableBuffering_Test() { //因为get方法,不能使用System.Net.Http.Json中的扩展方法 var vm = new AdvancedGetModel() { Id = 3, Name = "张三" }; var content = new StringContent(JsonConvert.SerializeObject(vm), Encoding.UTF8, System.Net.Mime.MediaTypeNames.Application.Json); var requestMessage = new HttpRequestMessage(HttpMethod.Get, "/api/AdvancedGet/GetWithBodyByEnableBuffering") { Content = content, }; var response = await GetHttpClient.SendAsync(requestMessage); response.EnsureSuccessStatusCode(); var responseText = await response.Content.ReadAsStringAsync(); _logger.WriteLine(responseText); } /// /// Post模型绑定对比 /// [Fact] public async Task PostFormData_Test() { var formData = new List> { new KeyValuePair("Id", "1"), new KeyValuePair("Name", "伍佰") }; HttpRequestMessage requestMessage = new HttpRequestMessage(HttpMethod.Post, "/api/AdvancedGet/PostFormData"); requestMessage.Content = new FormUrlEncodedContent(formData); var response = await GetHttpClient.SendAsync(requestMessage); response.EnsureSuccessStatusCode(); var responseText = await response.Content.ReadAsStringAsync(); _logger.WriteLine(responseText); } /// /// Post模型绑定对比 /// [Fact] public async Task PostJsonData_Test() { var vm = new AdvancedGetModel() { Id = 2, Name = "伍佰" }; var response = await GetHttpClient.PostAsJsonAsync("/api/AdvancedGet/PostJsonData", vm); response.EnsureSuccessStatusCode(); var responseText = await response.Content.ReadAsStringAsync(); _logger.WriteLine(responseText); } #endregion } }