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
}
}