| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- using System.Net;
- using System.Net.Http;
- using System.Net.Sockets;
- using QuickIP.Client.Models;
- namespace QuickIP.Client.Services;
- public sealed class AgentApiService
- {
- public async Task<HealthCheckResult> CheckHealthAsync(string baseAddress, string password, string localIPv4, CancellationToken cancellationToken = default)
- {
- try
- {
- using var handler = new SocketsHttpHandler();
- if (!string.IsNullOrWhiteSpace(localIPv4))
- {
- handler.ConnectCallback = async (context, token) =>
- {
- var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
- socket.Bind(new IPEndPoint(IPAddress.Parse(localIPv4), 0));
- await socket.ConnectAsync(context.DnsEndPoint, token);
- return new NetworkStream(socket, ownsSocket: true);
- };
- }
- using var client = new HttpClient(handler) { BaseAddress = new Uri(baseAddress), Timeout = TimeSpan.FromSeconds(5) };
- client.DefaultRequestHeaders.Add("X-Admin-Password", password);
- using var response = await client.GetAsync("/api/health", cancellationToken);
- return new HealthCheckResult
- {
- Success = response.IsSuccessStatusCode,
- StatusCode = (int)response.StatusCode,
- Message = response.IsSuccessStatusCode
- ? "HTTP 健康检查通过。"
- : $"HTTP 健康检查返回状态码 {(int)response.StatusCode}。",
- };
- }
- catch (Exception ex)
- {
- return new HealthCheckResult
- {
- Success = false,
- StatusCode = null,
- Message = ex.Message,
- };
- }
- }
- }
|