diff --git a/HttpClientStudy.UnitTest/HttpClientTest.cs b/HttpClientStudy.UnitTest/HttpClientTest.cs index 54aa7ae..6d9ca2f 100644 --- a/HttpClientStudy.UnitTest/HttpClientTest.cs +++ b/HttpClientStudy.UnitTest/HttpClientTest.cs @@ -15,31 +15,63 @@ namespace HttpClientStudy.UnitTest _logger = outputHelper; } + #region Get请求中使用请求体:强烈不推荐这种方法 + /// /// Get请求中使用请求体 /// 注意:服务器要设置(配置KestrelServerOptions AllowSynchronousIO值为true) /// /// [Fact] - public async Task GetWithBodyTestAsync() + public async Task GetWithBody_Test() { HttpClient httpClient = new HttpClient(); - var formData = new List> { new KeyValuePair("param1", "value1"), new KeyValuePair("param2", "value2") }; - HttpRequestMessage requestMessage = new HttpRequestMessage(HttpMethod.Post,"http://localhost:5189/api/AdvancedGet/GetWithBody"); + HttpRequestMessage requestMessage = new HttpRequestMessage(HttpMethod.Get,"http://localhost:5189/api/AdvancedGet/GetWithBody"); requestMessage.Content = new FormUrlEncodedContent(formData); var response = await httpClient.SendAsync(requestMessage); response.EnsureSuccessStatusCode(); + var responseText = await response.Content.ReadAsStringAsync(); + _logger.WriteLine(responseText); } + + /// + /// Post模型绑定对比 + /// + /// + [Fact] + public async Task PostDemo_Test() + { + HttpClient httpClient = new HttpClient(); + + var formData = new List> + { + new KeyValuePair("param1", "value1"), + new KeyValuePair("param2", "value2") + }; + + HttpRequestMessage requestMessage = new HttpRequestMessage(HttpMethod.Post, "http://localhost:5189/api/AdvancedGet/PostDemo"); + + requestMessage.Content = new FormUrlEncodedContent(formData); + + + var response = await httpClient.SendAsync(requestMessage); + response.EnsureSuccessStatusCode(); + var responseText = await response.Content.ReadAsStringAsync(); + _logger.WriteLine(responseText); + + } + + #endregion } } diff --git a/HttpClientStudy.WebApp/Controllers/AdvancedGetController.cs b/HttpClientStudy.WebApp/Controllers/AdvancedGetController.cs index d18a85e..e672c88 100644 --- a/HttpClientStudy.WebApp/Controllers/AdvancedGetController.cs +++ b/HttpClientStudy.WebApp/Controllers/AdvancedGetController.cs @@ -25,24 +25,37 @@ namespace HttpClientStudy.WebApp.Controllers /// /// 带请求体数据的Get请求 /// (asp.net 3开始,默认不允许Get有Body) + /// 注意:不能直接使用模型绑定接收数据,而应以流的方式读取请求体中的数据 /// /// [HttpGet] - [HttpPost] public async Task GetWithBodyAsync() { + var requestBody = ""; + + //以流方式读取请求体中的数据 if (Request.ContentLength>0) { using (var reader = new StreamReader(Request.Body, Encoding.UTF8, detectEncodingFromByteOrderMarks: false, bufferSize: 1024, leaveOpen: true)) { - var body = await reader.ReadToEndAsync(); + requestBody = await reader.ReadToEndAsync(); // 现在你有了请求体,可以按照你的需求处理它 } } + var result = BaseResultUtil.Success(requestBody); + return Ok(result); + } - var reslut = BaseResultUtil.Success("操作成功"); - return Ok(reslut); + /// + /// Post测试方法 + /// + /// + [HttpGet] + public IActionResult PostDemo() + { + var result = BaseResultUtil.Success("操作成功"); + return Ok(result); } } }