You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

211 lines
7.3 KiB
C#

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