简单请求

main
wanggaofeng 1 year ago
parent bcff6c45d8
commit f907d5bc6a

@ -1,7 +0,0 @@
namespace HttpClientStudy.Core
{
public class Class1
{
}
}

@ -0,0 +1,102 @@
using System.Net.Http.Headers;
using System.Net.Http.Json;
using System.Net.Http;
using System.Net.Mime;
using System.Net;
namespace HttpClientStudy.Core
{
/// <summary>
/// 简单 HttpClient 包装类
/// </summary>
public class SimpleHttpClient
{
public string Get(string url)
{
HttpClient client = new HttpClient();
//可以统一设置HttpClient属性HttpClient可以使用统一设置进行多次请求。
//client.BaseAddress = new Uri(url);
//client.DefaultRequestHeaders.Add("Accept", "application/json");
//client.DefaultRequestVersion = HttpVersion.Version10;
//client.DefaultVersionPolicy = HttpVersionPolicy.RequestVersionOrHigher;
//client.Timeout = TimeSpan.FromSeconds(60);
//client.CancelPendingRequests();
//只有Send是同步方法其它全为异步方法。
//Send同步方法需要HttpRequestMessage参数
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, url);
var response = client.Send(request);
response.EnsureSuccessStatusCode();
//或者
if (response.IsSuccessStatusCode)
{
//业务逻辑
}
//状态码
if (response is { StatusCode: HttpStatusCode.OK })
{
//业务逻辑
}
//请求头
if(response is { Headers.ETag:null})
{
//业务逻辑
}
var result = response.Content.ReadAsStringAsync().Result;
return result;
}
public async Task<string> GetAsync(string url)
{
HttpClient client = new HttpClient();
var response = await client.GetAsync(url);
response.EnsureSuccessStatusCode();
var result = await response.Content.ReadAsStringAsync();
return result;
}
public TResult? GetJson<TResult>(string url)
{
HttpClient client = new HttpClient();
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Get, url);
var response = client.Send(request);
response.EnsureSuccessStatusCode();
if (response.Content.Headers.ContentType?.MediaType != MediaTypeNames.Application.Json)
{
throw new HttpRequestException("响应不是 json 格式!");
}
var result = response.Content.ReadFromJsonAsync<TResult>().Result;
return result;
}
public async Task<TResult?> GetJsonAsync<TResult>(string url)
{
HttpClient client = new HttpClient();
var response = await client.GetAsync(url);
response.EnsureSuccessStatusCode();
if (response.Content.Headers.ContentType?.MediaType != MediaTypeNames.Application.Json)
{
throw new HttpRequestException("响应不是 json 格式!");
}
var result = await response.Content.ReadFromJsonAsync<TResult>();
return result;
}
}
}

@ -0,0 +1,48 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HttpClientStudy.UnitTest.Core
{
/// <summary>
/// SimpleHttpClient 测试类
/// </summary>
public class SimpleHttpClientTest
{
private readonly ITestOutputHelper _logger;
public SimpleHttpClientTest(ITestOutputHelper outputHelper)
{
_logger = outputHelper;
}
[Fact]
public void Get_Test()
{
SimpleHttpClient client = new SimpleHttpClient();
var result = client.Get("http://localhost:5000/api/Simple/GetAccount");
Assert.NotNull(result);
Assert.NotEmpty(result);
}
[Fact]
public void Test()
{
SimpleHttpClient client = new SimpleHttpClient();
var result = client.GetJson<BaseResult<string>>("http://localhost:5000/api/Simple/GetAccount");
Assert.NotNull(result);
Assert.IsAssignableFrom<BaseResult>(result);
Assert.Equal(1, result.Code);
Assert.Contains("成功", result.Message);
Assert.IsType<string>(result.Message);
Assert.NotEmpty(result.Message);
}
}
}

@ -0,0 +1,12 @@
{
"version": 1,
"isRoot": true,
"tools": {
"dotnet-ef": {
"version": "8.0.0",
"commands": [
"dotnet-ef"
]
}
}
}

@ -12,7 +12,6 @@ namespace HttpClientStudy.WebApp
/// </summary>
public int Code { get; set; }
/// <summary>
/// <summary>
/// 接口返回说明信息
/// </summary>
@ -30,11 +29,21 @@ namespace HttpClientStudy.WebApp
/// <typeparam name="T"></typeparam>
public class BaseResult<T> : BaseResult
{
/// <summary>
/// 创建返回基数
/// </summary>
/// <param name="data">泛型数据</param>
/// <param name="code">编码</param>
/// <param name="message">说明信息</param>
/// <returns></returns>
public static BaseResult<T> Create(T? data = default, int code = 0, string message = "")
{
return new BaseResult<T> { Data = data, Code = code, Message = message };
}
/// <summary>
/// 泛型返回核心数据
/// </summary>
public new T? Data { get; set; }
}
@ -154,7 +163,6 @@ namespace HttpClientStudy.WebApp
/// <summary>
/// 创建 泛型异常返回基类
/// </summary>
public static BaseResult<TData> Exception<TData>(Exception ex, TData? data, int code = 0)
{
return new BaseResult<TData>() { Data = data, Code = code, Message = $"异常:{ex.Message}" };

Loading…
Cancel
Save