From 4cc06499957c4035c82cc31c2c77eb1cc96d26cb Mon Sep 17 00:00:00 2001 From: wanggaofeng <15601716045@163.com> Date: Sun, 7 Jan 2024 16:38:44 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../NormalHttpClientTest.cs | 102 +++++++++++++++--- 1 file changed, 87 insertions(+), 15 deletions(-) diff --git a/HttpClientStudy.UnitTest/NormalHttpClientTest.cs b/HttpClientStudy.UnitTest/NormalHttpClientTest.cs index aff3802..15df1a5 100644 --- a/HttpClientStudy.UnitTest/NormalHttpClientTest.cs +++ b/HttpClientStudy.UnitTest/NormalHttpClientTest.cs @@ -69,6 +69,32 @@ namespace HttpClientStudy.UnitTest Assert.Equal(2, result.Data?.Id); } + /// + /// GET 请求 + /// (路由传参) + /// + /// + [Fact] + public async Task GetAccount_Route_Test() + { + HttpClient httpClient = new HttpClient() + { + BaseAddress = new Uri(TestConfig.WebApiBaseUrl), + }; + + var responseMessage = await httpClient.GetAsync("/api/Normal/GetAccount/管理员02"); + + responseMessage.EnsureSuccessStatusCode(); + + Assert.NotNull(responseMessage); + Assert.True(responseMessage.IsSuccessStatusCode); + + var result = await responseMessage.Content.ReadFromJsonAsync>(); + Assert.IsType>(result); + Assert.Equal(1, result.Code); + Assert.Equal("管理员02", result.Data?.Name); + } + /// /// GET 请求 /// (中文参数:现在浏览器直接支持,为最大兼容老旧浏览器使用url编码) @@ -102,6 +128,11 @@ namespace HttpClientStudy.UnitTest Assert.Equal(2, result.Data?.Count); } + /// + /// GET 请求 + /// (查询参数传参) + /// + /// [Fact] public async Task GetAccountByRole_Test() { @@ -110,7 +141,7 @@ namespace HttpClientStudy.UnitTest BaseAddress = new Uri(TestConfig.WebApiBaseUrl), }; - var responseMessage = await httpClient.GetAsync("/api/Normal/GetAccountByRole"); + var responseMessage = await httpClient.GetAsync("/api/Normal/GetAccountByRole?role=Admin"); responseMessage.EnsureSuccessStatusCode(); @@ -120,9 +151,43 @@ namespace HttpClientStudy.UnitTest var result = await responseMessage.Content.ReadFromJsonAsync>>(); Assert.IsType>>(result); Assert.Equal(1, result.Code); - Assert.NotNull(result.Data); + //每项的角色都是查询的角色 + Assert.False(result.Data?.Any(d=>d.Role != "Admin")); + } + + /// + /// GET 请求 + /// (请求头传参:中文必须Url编码,服务端Url解码后使用) + /// + /// + [Fact] + public async Task GetAccountFromHeader_Test() + { + HttpClient httpClient = new HttpClient() + { + BaseAddress = new Uri(TestConfig.WebApiBaseUrl), + }; + + //中文参数必须先编码 + httpClient.DefaultRequestHeaders.Add("name", System.Net.WebUtility.UrlEncode("管理员01")); + var responseMessage = await httpClient.GetAsync("/api/Normal/GetAccountFromHeader"); + + responseMessage.EnsureSuccessStatusCode(); + + Assert.NotNull(responseMessage); + Assert.True(responseMessage.IsSuccessStatusCode); + + var result = await responseMessage.Content.ReadFromJsonAsync>(); + Assert.IsType>(result); + Assert.Equal(1, result.Code); + Assert.Equal(1,result.Data?.Id); } + /// + /// GET 请求 + /// (客户端不传参,服务端参数直接来由IoC中注入的服务) + /// + /// [Fact] public async Task GetAccountByService_Test() { @@ -138,15 +203,17 @@ namespace HttpClientStudy.UnitTest Assert.NotNull(responseMessage); Assert.True(responseMessage.IsSuccessStatusCode); - var result = await responseMessage.Content.ReadFromJsonAsync>>(); - Assert.IsType>>(result); + var result = await responseMessage.Content.ReadFromJsonAsync>(); + Assert.IsType>(result); Assert.Equal(1, result.Code); - Assert.NotNull(result.Data); + Assert.Equal("服务注入示例",result.Data?.Name); } #endregion + #region PUT 请求 /// /// Put 请求 + /// (新建或替换、更新资源) /// /// [Fact] @@ -157,21 +224,24 @@ namespace HttpClientStudy.UnitTest BaseAddress = new Uri(TestConfig.WebApiBaseUrl), }; - var responseMessage = await httpClient.GetAsync("/api/Normal/PutDemo"); + var responseMessage = await httpClient.PutAsync("/api/Normal/PutDemo?id=2",null); responseMessage.EnsureSuccessStatusCode(); Assert.NotNull(responseMessage); Assert.True(responseMessage.IsSuccessStatusCode); - var result = await responseMessage.Content.ReadFromJsonAsync>>(); - Assert.IsType>>(result); - Assert.Equal(1, result.Code); - Assert.NotNull(result.Data); + var result = await responseMessage.Content.ReadAsStringAsync(); + } + #endregion + #region HEAD 请求 /// /// Head 请求 + /// 注意:HttpClient没有直接提供HEAD请求方法: + /// 步骤1:构建 HttpRequestMessage 对象,设置HttpMethod.Head + /// 步骤2:把上步构建的HttpRequestMessage 对象,作为参数传递给 HttpClient实例的 Send 或 SendAsync 方法 /// /// [Fact] @@ -182,17 +252,19 @@ namespace HttpClientStudy.UnitTest BaseAddress = new Uri(TestConfig.WebApiBaseUrl), }; - var responseMessage = await httpClient.GetAsync("/api/Normal/HeadDemo"); + var requestMessage = new HttpRequestMessage(HttpMethod.Head, "/api/Normal/HeadDemo?Id=2"); + + HttpResponseMessage responseMessage = await httpClient.SendAsync(requestMessage); responseMessage.EnsureSuccessStatusCode(); Assert.NotNull(responseMessage); Assert.True(responseMessage.IsSuccessStatusCode); - var result = await responseMessage.Content.ReadFromJsonAsync>>(); - Assert.IsType>>(result); - Assert.Equal(1, result.Code); - Assert.NotNull(result.Data); + //head请求没有返回体 + var result = await responseMessage.Content.ReadAsStringAsync(); + Assert.Empty(result); } + #endregion } }