|
|
|
@ -5,6 +5,12 @@ using System.Text;
|
|
|
|
|
using System.Threading.Tasks;
|
|
|
|
|
|
|
|
|
|
using System.Net.Http.Json;
|
|
|
|
|
using System.Net;
|
|
|
|
|
using Newtonsoft.Json;
|
|
|
|
|
using Microsoft.AspNetCore.Mvc;
|
|
|
|
|
using System.Text.Json;
|
|
|
|
|
using System.Security.Authentication.ExtendedProtection;
|
|
|
|
|
using Newtonsoft.Json.Linq;
|
|
|
|
|
|
|
|
|
|
namespace HttpClientStudy.UnitTest
|
|
|
|
|
{
|
|
|
|
@ -20,7 +26,7 @@ namespace HttpClientStudy.UnitTest
|
|
|
|
|
_logger = outputHelper;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#region Get请求
|
|
|
|
|
#region GET请求
|
|
|
|
|
|
|
|
|
|
[Fact]
|
|
|
|
|
public async Task GetAllAccounts_Test()
|
|
|
|
@ -208,6 +214,26 @@ namespace HttpClientStudy.UnitTest
|
|
|
|
|
Assert.Equal(1, result.Code);
|
|
|
|
|
Assert.Equal("服务注入示例",result.Data?.Name);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// GET 请求
|
|
|
|
|
/// (直接调用System.Net.Http.Json类的扩展方法GetFromJsonAsync 获取 Json 结果)
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
[Fact]
|
|
|
|
|
public async Task Get_From_Json_Test()
|
|
|
|
|
{
|
|
|
|
|
HttpClient httpClient = new HttpClient()
|
|
|
|
|
{
|
|
|
|
|
BaseAddress = new Uri(TestConfig.WebApiBaseUrl),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var result = await httpClient.GetFromJsonAsync<BaseResult<Account>>("/api/Normal/GetAccountFromServices");
|
|
|
|
|
|
|
|
|
|
Assert.IsType<BaseResult<Account>>(result);
|
|
|
|
|
Assert.Equal(1, result.Code);
|
|
|
|
|
Assert.Equal("服务注入示例", result.Data?.Name);
|
|
|
|
|
}
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region PUT 请求
|
|
|
|
@ -266,5 +292,140 @@ namespace HttpClientStudy.UnitTest
|
|
|
|
|
Assert.Empty(result);
|
|
|
|
|
}
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region POST 请求
|
|
|
|
|
|
|
|
|
|
[Fact]
|
|
|
|
|
public async Task PostSimple_Test()
|
|
|
|
|
{
|
|
|
|
|
HttpClient httpClient = new HttpClient()
|
|
|
|
|
{
|
|
|
|
|
BaseAddress = new Uri(TestConfig.WebApiBaseUrl),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
//响应
|
|
|
|
|
var responseMessage = await httpClient.PostAsync("/api/Normal/PostSimple", null);
|
|
|
|
|
|
|
|
|
|
//响应正常
|
|
|
|
|
Assert.True(responseMessage.IsSuccessStatusCode);
|
|
|
|
|
Assert.NotNull(responseMessage);
|
|
|
|
|
|
|
|
|
|
var result = await responseMessage.Content.ReadFromJsonAsync<BaseResult<string>>();
|
|
|
|
|
Assert.IsType<BaseResult<string>>(result);
|
|
|
|
|
Assert.Equal(1, result?.Code);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Fact]
|
|
|
|
|
public async Task PostCreate_Test()
|
|
|
|
|
{
|
|
|
|
|
HttpClient httpClient = new HttpClient()
|
|
|
|
|
{
|
|
|
|
|
BaseAddress = new Uri(TestConfig.WebApiBaseUrl),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
//参数
|
|
|
|
|
var para = new Account() {Id=100, Name="小明", Password="123456", Role="Admin" };
|
|
|
|
|
|
|
|
|
|
//请求体
|
|
|
|
|
var plainContent = new StringContent(JsonConvert.SerializeObject(para), Encoding.UTF8, System.Net.Mime.MediaTypeNames.Application.Json);
|
|
|
|
|
|
|
|
|
|
//发POST请求
|
|
|
|
|
var responseMessage = await httpClient.PostAsync("/api/Normal/PostCreate", plainContent);
|
|
|
|
|
|
|
|
|
|
//确保响应正常
|
|
|
|
|
responseMessage.EnsureSuccessStatusCode();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Assert.NotNull(responseMessage);
|
|
|
|
|
Assert.True(responseMessage.IsSuccessStatusCode);
|
|
|
|
|
|
|
|
|
|
var text = await responseMessage.Content.ReadAsStringAsync();
|
|
|
|
|
|
|
|
|
|
var result = JsonConvert.DeserializeObject<CreatedAtActionResult> (text);
|
|
|
|
|
|
|
|
|
|
Assert.IsType<CreatedAtActionResult>(result);
|
|
|
|
|
Assert.Equal(201, result.StatusCode);
|
|
|
|
|
Assert.IsType<Newtonsoft.Json.Linq.JObject>(result.Value);
|
|
|
|
|
|
|
|
|
|
//新创建的对象
|
|
|
|
|
var account = JsonConvert.DeserializeObject<Account>(value: result.Value.ToString() ?? "");
|
|
|
|
|
|
|
|
|
|
Assert.NotNull(account);
|
|
|
|
|
Assert.Equal(100,account.Id);
|
|
|
|
|
|
|
|
|
|
//由于构造函数等原因,直接使用ReadFromJsonAsync,会异常。
|
|
|
|
|
//CreatedAtActionResult? result = await responseMessage.Content.ReadFromJsonAsync<CreatedAtActionResult>(new JsonSerializerOptions() { IncludeFields=true, PropertyNameCaseInsensitive=true});
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Fact]
|
|
|
|
|
public async Task PostUpdate_Test()
|
|
|
|
|
{
|
|
|
|
|
HttpClient httpClient = new HttpClient()
|
|
|
|
|
{
|
|
|
|
|
BaseAddress = new Uri(TestConfig.WebApiBaseUrl),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
//参数
|
|
|
|
|
var para = new Account() { Id = 1, Name = "小明", Password = "123456", Role = "Admin" };
|
|
|
|
|
|
|
|
|
|
//发POST请求
|
|
|
|
|
var responseMessage = await httpClient.PostAsJsonAsync("/api/Normal/PostUpdate", para);
|
|
|
|
|
|
|
|
|
|
//确保响应正常
|
|
|
|
|
responseMessage.EnsureSuccessStatusCode();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Assert.NotNull(responseMessage);
|
|
|
|
|
Assert.True(responseMessage.IsSuccessStatusCode);
|
|
|
|
|
|
|
|
|
|
var result = await responseMessage.Content.ReadFromJsonAsync<BaseResult<Account>>();
|
|
|
|
|
Assert.IsType<BaseResult<Account>>(result);
|
|
|
|
|
Assert.Equal(1, result.Code);
|
|
|
|
|
|
|
|
|
|
Assert.Equal(1, result.Data?.Id);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
[Fact]
|
|
|
|
|
public async Task PostRemove_Test()
|
|
|
|
|
{
|
|
|
|
|
HttpClient httpClient = new HttpClient()
|
|
|
|
|
{
|
|
|
|
|
BaseAddress = new Uri(TestConfig.WebApiBaseUrl),
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
var para_id = 2;
|
|
|
|
|
|
|
|
|
|
//发POST请求(URL传参)
|
|
|
|
|
var responseMessage = await httpClient.PostAsync($"/api/Normal/PostRemove?Id={para_id}", null);
|
|
|
|
|
|
|
|
|
|
//确保响应正常
|
|
|
|
|
responseMessage.EnsureSuccessStatusCode();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Assert.NotNull(responseMessage);
|
|
|
|
|
Assert.True(responseMessage.IsSuccessStatusCode);
|
|
|
|
|
|
|
|
|
|
var result = await responseMessage.Content.ReadFromJsonAsync<BaseResult<Account>>();
|
|
|
|
|
Assert.IsType<BaseResult<Account>>(result);
|
|
|
|
|
Assert.Equal(1, result.Code);
|
|
|
|
|
|
|
|
|
|
Assert.Equal(para_id, result.Data?.Id);
|
|
|
|
|
}
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region DELETE 请求
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region OPTIONS 请求
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region PATCH 请求
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region TRACE 请求
|
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region CONNECT 请求
|
|
|
|
|
#endregion
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|