namespace Yh.SchClass.OpenApi.Tests; /// /// 伪造 :捕获最近一次请求并回放预设响应。 /// 与 Yh.Platform.OpenApi.Tests 的 FakeHandler 同构,便于两个 SDK 的测试互相参照。 /// public sealed class FakeHandler : HttpMessageHandler { private readonly Func _responder; public FakeHandler(Func responder) { _responder = responder; } /// 最近一次捕获到的请求。 public HttpRequestMessage? LastRequest { get; private set; } /// 最近一次请求体(无请求体时为 null)。 public string? LastRequestBody { get; private set; } /// 最近一次请求体的 Content-Type(无请求体时为 null)。 public string? LastContentType { get; private set; } protected override async Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) { LastRequest = request; if (request.Content == null) { LastRequestBody = null; LastContentType = null; } else { LastRequestBody = await request.Content.ReadAsStringAsync(cancellationToken); LastContentType = request.Content.Headers.ContentType?.MediaType; } return _responder(request, LastRequestBody); } /// 回放一段固定 JSON(application/json)。 public static FakeHandler Json(HttpStatusCode statusCode, string json) => new((_, _) => new HttpResponseMessage(statusCode) { Content = new StringContent(json, Encoding.UTF8, "application/json"), }); /// 回放指定状态码且无响应体(模拟 204 / 404 空响应)。 public static FakeHandler Empty(HttpStatusCode statusCode) => new((_, _) => new HttpResponseMessage(statusCode)); /// 回放纯文本响应(模拟非 JSON 的错误页)。 public static FakeHandler Text(HttpStatusCode statusCode, string text) => new((_, _) => new HttpResponseMessage(statusCode) { Content = new StringContent(text, Encoding.UTF8, "text/plain"), }); }