更新:健康检查

main
wanggaofeng 1 year ago
parent 74d3d614ab
commit 4f9788b50b

@ -18,4 +18,8 @@
<ProjectReference Include="..\HttpClientStudy.Model\HttpClientStudy.Model.csproj" />
</ItemGroup>
<ItemGroup>
<Folder Include="UsePolly\" />
</ItemGroup>
</Project>

@ -1,10 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HttpClientStudy.Core.HttpRequests
namespace HttpClientStudy.Core.HttpRequests
{
/// <summary>
/// Http 请求内容

@ -8,8 +8,30 @@ namespace HttpClientStudy.Core.HttpRequests
{
/// <summary>
/// Http 请求参数
/// <list type="number">
/// <item>
/// <term>Url 参数</term>
/// <description>参数拼接在请求的Url中</description>
/// </item>
/// <item>
/// <term>路由参数</term>
/// <description>参数在请求路由中</description>
/// </item>
/// <item>
/// <term>请求头参数</term>
/// <description>参数在请求头中</description>
/// </item>
/// <item>
/// <term>请求体参数</term>
/// <description>参数在请求体中</description>
/// </item>
/// </list>
/// </summary>
/// <remarks>
/// 请求体参数,<br/> 放入单独类 <see cref="HttpRequestContents"/>
/// </remarks>
public class HttpRequestParameters
{
}
}

@ -4,7 +4,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HttpClientStudy.Core
namespace HttpClientStudy.Core.UseJson
{
/// <summary>
/// Http中使用Json

@ -0,0 +1,53 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HttpClientStudy.Model
{
/// <summary>
/// API 返回基类
/// </summary>
public class BaseResult
{
/// <summary>
/// 接口返回代码
/// </summary>
public int Code { get; set; }
/// <summary>
/// 接口返回说明信息
/// </summary>
public string? Message { get; set; }
/// <summary>
/// 接口返回数据
/// </summary>
public object? Data { get; set; } = string.Empty;
}
/// <summary>
/// API 泛型返回基类
/// </summary>
/// <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; }
}
}

@ -1,52 +1,11 @@
using System.Linq.Expressions;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace HttpClientStudy.WebApp
namespace HttpClientStudy.Model
{
/// <summary>
/// API 返回基类
/// </summary>
public class BaseResult
{
/// <summary>
/// 接口返回代码
/// </summary>
public int Code { get; set; }
/// <summary>
/// 接口返回说明信息
/// </summary>
public string? Message { get; set; }
/// <summary>
/// 接口返回数据
/// </summary>
public object? Data { get; set; } = string.Empty;
}
/// <summary>
/// API 泛型返回基类
/// </summary>
/// <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; }
}
/// <summary>
/// API返回基类 工具类
/// </summary>
@ -55,7 +14,7 @@ namespace HttpClientStudy.WebApp
/// <summary>
/// 创建 泛型返回基类
/// </summary>
public static BaseResult<TData> Create<TData>(TData data, int code = 0, string message = "")
public static BaseResult<TData> Create<TData>(TData data, int code = 0, string message = "")
{
return new BaseResult<TData>() { Data = data, Code = code, Message = message };
}
@ -63,7 +22,7 @@ namespace HttpClientStudy.WebApp
/// <summary>
/// 创建 泛型成功返回基类
/// </summary>
public static BaseResult<TData> Success<TData>()
public static BaseResult<TData> Success<TData>()
{
return Success<TData>(default, 1, "成功");
}
@ -79,7 +38,7 @@ namespace HttpClientStudy.WebApp
/// <summary>
/// 创建 泛型成功返回基类
/// </summary>
public static BaseResult<TData> Success<TData>(TData? data, string message)
public static BaseResult<TData> Success<TData>(TData? data, string message)
{
return Success(data, 1, message);
}
@ -87,7 +46,7 @@ namespace HttpClientStudy.WebApp
/// <summary>
/// 创建 泛型成功返回基类
/// </summary>
public static BaseResult<TData> Success<TData>(TData? data, int code, string message)
public static BaseResult<TData> Success<TData>(TData? data, int code, string message)
{
return new BaseResult<TData>() { Data = data, Code = code, Message = message };
}
@ -95,7 +54,7 @@ namespace HttpClientStudy.WebApp
/// <summary>
/// 创建 泛型错误返回基类
/// </summary>
public static BaseResult<TData> Error<TData>()
public static BaseResult<TData> Error<TData>()
{
return Error<TData>(default, 0, "错误");
}
@ -103,7 +62,7 @@ namespace HttpClientStudy.WebApp
/// <summary>
/// 创建 泛型错误返回基类
/// </summary>
public static BaseResult<TData> Error<TData>(TData? data)
public static BaseResult<TData> Error<TData>(TData? data)
{
return Error(data, 0, "错误");
}
@ -111,7 +70,7 @@ namespace HttpClientStudy.WebApp
/// <summary>
/// 创建 泛型错误返回基类
/// </summary>
public static BaseResult<TData> Error<TData>(TData? data, int code = 0, string message = "错误")
public static BaseResult<TData> Error<TData>(TData? data, int code = 0, string message = "错误")
{
return new BaseResult<TData>() { Data = data, Code = code, Message = message };
}
@ -127,7 +86,7 @@ namespace HttpClientStudy.WebApp
/// <summary>
/// 创建 泛型失败返回基类
/// </summary>
public static BaseResult<TData> Fail<TData>(TData? data)
public static BaseResult<TData> Fail<TData>(TData? data)
{
return Fail(data, 0, "失败");
}
@ -135,7 +94,7 @@ namespace HttpClientStudy.WebApp
/// <summary>
/// 创建 泛型失败返回基类
/// </summary>
public static BaseResult<TData> Fail<TData>(TData? data, int code = 0, string message = "失败")
public static BaseResult<TData> Fail<TData>(TData? data, int code = 0, string message = "失败")
{
return new BaseResult<TData>() { Data = data, Code = 0, Message = "失败" };
}
@ -145,7 +104,7 @@ namespace HttpClientStudy.WebApp
/// </summary>
public static BaseResult<TData> Exception<TData>(Exception ex)
{
return Exception<TData>(ex, default,0);
return Exception<TData>(ex, default, 0);
}
/// <summary>
@ -155,7 +114,7 @@ namespace HttpClientStudy.WebApp
/// <param name="ex"></param>
/// <param name="data"></param>
/// <returns></returns>
public static BaseResult<TData> Exception<TData>(Exception ex, TData? data)
public static BaseResult<TData> Exception<TData>(Exception ex, TData? data)
{
return Exception(ex, data, 0);
}
@ -163,7 +122,7 @@ namespace HttpClientStudy.WebApp
/// <summary>
/// 创建 泛型异常返回基类
/// </summary>
public static BaseResult<TData> Exception<TData>(Exception ex, TData? data, int code = 0)
public static BaseResult<TData> Exception<TData>(Exception ex, TData? data, int code = 0)
{
return new BaseResult<TData>() { Data = data, Code = code, Message = $"异常:{ex.Message}" };
}

@ -20,6 +20,9 @@ global using Xunit.Serialization;
global using HttpClientStudy.Model;
global using HttpClientStudy.Core;
global using HttpClientStudy.Core.UseJson;
global using HttpClientStudy.Core.HttpRequests;
global using HttpClientStudy.Core.HttpResponses;
global using HttpClientStudy.Service;

@ -31,11 +31,10 @@
</ItemGroup>
<ItemGroup>
<EditorConfigFiles Remove="E:\王高峰\我的项目\学习项目\HttpClientStudy\HttpClientStudy.UnitTest\.editorconfig" />
</ItemGroup>
<ItemGroup>
<None Include="E:\王高峰\我的项目\学习项目\HttpClientStudy\HttpClientStudy.UnitTest\.editorconfig" />
<Folder Include="HttpRequests\" />
<Folder Include="HttpResponses\" />
<Folder Include="UsePolly\" />
<Folder Include="UseJson\" />
</ItemGroup>
</Project>

@ -53,7 +53,7 @@ namespace HttpClientStudy.UnitTest.HttpClients
{
HttpClient httpClient = new HttpClient();
var responseMessage = await httpClient.GetAsync(TestConfig.WebApiBaseUrl + "/api/account/ping");
var responseMessage = await httpClient.GetAsync(TestConfig.WebApiBaseUrl + "/api/health");
responseMessage.EnsureSuccessStatusCode();
}
@ -68,7 +68,7 @@ namespace HttpClientStudy.UnitTest.HttpClients
};
for (int i = 0; i < 100; i++)
{
var responseMessage = await httpClient.GetAsync("/api/account/ping");
var responseMessage = await httpClient.GetAsync("/api/health");
responseMessage.EnsureSuccessStatusCode();
}

@ -31,7 +31,7 @@ namespace HttpClientStudy.UnitTest.HttpClients
//构造中传入管道对象
HttpClient httpClient = new HttpClient(handler);
var sd = await httpClient.GetAsync(TestConfig.WebApiBaseUrl + "/api/account/ping");
var sd = await httpClient.GetAsync(TestConfig.WebApiBaseUrl + "/api/health");
var contentText = await sd.Content.ReadAsStringAsync();
_logger.WriteLine(contentText);
@ -42,7 +42,7 @@ namespace HttpClientStudy.UnitTest.HttpClients
{
HttpClient client = new PipelineHttpClient().CreateHttpClient();
var r = await client.GetAsync(TestConfig.WebApiBaseUrl + "/api/account/ping");
var r = await client.GetAsync(TestConfig.WebApiBaseUrl + "/api/health");
r.EnsureSuccessStatusCode();
}
}

@ -26,20 +26,6 @@ namespace HttpClientStudy.WebApp.Controllers
/// </summary>
public AccountController() { }
/// <summary>
/// Ping 测试接口
/// </summary>
/// <example>
/// Ping
/// </example>
/// <returns></returns>
[HttpGet]
public IActionResult Ping()
{
return Ok("pong");
}
/// <summary>
/// 获取Token
/// </summary>

@ -0,0 +1,25 @@
global using System;
global using System.Linq;
global using System.Text;
global using System.Threading.Tasks;
global using System.Collections.Generic;
global using System.Net;
global using System.Net.Mime;
global using System.Net.Http;
global using System.Net.Http.Json;
global using System.Net.Http.Headers;
global using HttpClientStudy.Model;
global using HttpClientStudy.Core;
global using HttpClientStudy.Core.UseJson;
global using HttpClientStudy.Core.HttpRequests;
global using HttpClientStudy.Core.HttpResponses;
global using HttpClientStudy.Service;
global using HttpClientStudy.WebApp;
global using HttpClientStudy.WebApp.Models;
global using HttpClientStudy.WebApp.Controllers;

@ -0,0 +1,21 @@
using Microsoft.Extensions.Diagnostics.HealthChecks;
namespace HttpClientStudy.WebApp
{
/// <summary>
/// 健康检查
/// </summary>
public class HealthCheck : IHealthCheck
{
/// <summary>
/// 健康检查该方法
/// </summary>
/// <param name="context">健康检查上下文</param>
/// <param name="cancellationToken">取消令牌</param>
/// <returns></returns>
public Task<HealthCheckResult> CheckHealthAsync(HealthCheckContext context, CancellationToken cancellationToken = default)
{
return Task.FromResult( HealthCheckResult.Healthy("ok"));
}
}
}

@ -164,6 +164,9 @@ namespace HttpClientStudy.WebApp
//ÊÚȨ
builder.Services.AddAuthorization();
//½¡¿µ¼ì²é
builder.Services.AddHealthChecks();
//ÆÕͨÀà
builder.Services.AddScoped(provider => new Account() { Id = 0, Name = "·þÎñ×¢ÈëʾÀý", Password = "123456", Role = "IoC" });
@ -171,8 +174,9 @@ namespace HttpClientStudy.WebApp
#endregion
var app = builder.Build();
#region ÅäÖÃHttp¹ÜµÀ
app.MapHealthChecks("api/health");
app.UseSwagger();
app.UseSwaggerUI(setup =>

@ -0,0 +1,3 @@
:: Launch WebApi project for unit testing
dotnet run --project %~dp0/HttpClientStudy.WebApp.csproj

@ -1,6 +1,6 @@
@HttpClientStudy.WebApp_HostAddress = http://localhost:5189
GET {{HttpClientStudy.WebApp_HostAddress}}/weatherforecast/
GET {{HttpClientStudy.WebApp_HostAddress}}/api/health
Accept: application/json
###

Loading…
Cancel
Save