更新:健康检查

main
wanggaofeng 1 year ago
parent 74d3d614ab
commit 4f9788b50b

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

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

@ -8,8 +8,30 @@ namespace HttpClientStudy.Core.HttpRequests
{ {
/// <summary> /// <summary>
/// Http 请求参数 /// 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> /// </summary>
/// <remarks>
/// 请求体参数,<br/> 放入单独类 <see cref="HttpRequestContents"/>
/// </remarks>
public class HttpRequestParameters public class HttpRequestParameters
{ {
} }
} }

@ -4,7 +4,7 @@ using System.Linq;
using System.Text; using System.Text;
using System.Threading.Tasks; using System.Threading.Tasks;
namespace HttpClientStudy.Core namespace HttpClientStudy.Core.UseJson
{ {
/// <summary> /// <summary>
/// Http中使用Json /// 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> /// <summary>
/// API返回基类 工具类 /// API返回基类 工具类
/// </summary> /// </summary>
@ -145,7 +104,7 @@ namespace HttpClientStudy.WebApp
/// </summary> /// </summary>
public static BaseResult<TData> Exception<TData>(Exception ex) public static BaseResult<TData> Exception<TData>(Exception ex)
{ {
return Exception<TData>(ex, default,0); return Exception<TData>(ex, default, 0);
} }
/// <summary> /// <summary>

@ -20,6 +20,9 @@ global using Xunit.Serialization;
global using HttpClientStudy.Model; global using HttpClientStudy.Model;
global using HttpClientStudy.Core; 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.Service;

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

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

@ -31,7 +31,7 @@ namespace HttpClientStudy.UnitTest.HttpClients
//构造中传入管道对象 //构造中传入管道对象
HttpClient httpClient = new HttpClient(handler); 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(); var contentText = await sd.Content.ReadAsStringAsync();
_logger.WriteLine(contentText); _logger.WriteLine(contentText);
@ -42,7 +42,7 @@ namespace HttpClientStudy.UnitTest.HttpClients
{ {
HttpClient client = new PipelineHttpClient().CreateHttpClient(); 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(); r.EnsureSuccessStatusCode();
} }
} }

@ -26,20 +26,6 @@ namespace HttpClientStudy.WebApp.Controllers
/// </summary> /// </summary>
public AccountController() { } public AccountController() { }
/// <summary>
/// Ping 测试接口
/// </summary>
/// <example>
/// Ping
/// </example>
/// <returns></returns>
[HttpGet]
public IActionResult Ping()
{
return Ok("pong");
}
/// <summary> /// <summary>
/// 获取Token /// 获取Token
/// </summary> /// </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.AddAuthorization();
//½¡¿µ¼ì²é
builder.Services.AddHealthChecks();
//ÆÕͨÀà //ÆÕͨÀà
builder.Services.AddScoped(provider => new Account() { Id = 0, Name = "·þÎñ×¢ÈëʾÀý", Password = "123456", Role = "IoC" }); builder.Services.AddScoped(provider => new Account() { Id = 0, Name = "·þÎñ×¢ÈëʾÀý", Password = "123456", Role = "IoC" });
@ -173,6 +176,7 @@ namespace HttpClientStudy.WebApp
var app = builder.Build(); var app = builder.Build();
#region ÅäÖÃHttp¹ÜµÀ #region ÅäÖÃHttp¹ÜµÀ
app.MapHealthChecks("api/health");
app.UseSwagger(); app.UseSwagger();
app.UseSwaggerUI(setup => 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 @HttpClientStudy.WebApp_HostAddress = http://localhost:5189
GET {{HttpClientStudy.WebApp_HostAddress}}/weatherforecast/ GET {{HttpClientStudy.WebApp_HostAddress}}/api/health
Accept: application/json Accept: application/json
### ###

Loading…
Cancel
Save