6.13自定义泛型内容转换器
创建于 2026 年 8 月 17 日约 1 分钟读完
除了具体类型,框架同样支持泛型内容的转换。例如,定义如下泛型转换器:
public class YourGenericClassContentConverter<T> : HttpContentConverterBase<YourGenericClass<T?>>{ /// <inheritdoc /> public override YourGenericClass<T?>? Read(HttpContentConverterContext context, CancellationToken cancellationToken = default) { // 实现同步转换逻辑 } /// <inheritdoc /> public override Task<YourGenericClass<T?>?> ReadAsync(HttpContentConverterContext context, CancellationToken cancellationToken = default) { // 实现异步转换逻辑 }}接下来在 Startup.cs 或 Program.cs 文件中,配置并注册 HttpRemote 服务,以启用自定义泛型内容转换器功能:
services.AddHttpRemote(builder =>{ builder.AddGenericHttpContentConverters(() => [ new(typeof(YourGenericClass<>), typeArgs => (IHttpContentConverter)Activator.CreateInstance(typeof(YourGenericClassContentConverter<>).MakeGenericType(typeArgs[0]))!) ]);});以下示例展示了如何在发送 HTTP 远程请求时使用 YourGenericClassContentConverter 内容转换器:
使用 IHttpRemoteService 方式:
var str = await httpRemoteService.GetAsAsync<YourGenericClass<string>>("https://furion.net/");使用 IHttpContentConverterFactory 方式:
public class YourService(IHttpContentConverterFactory httpContentConverterFactory) // .NET8+ 支持主构造函数注入{ public async Task<YourGenericClass<string>?> GetStringAsync() { var httpRequestMessage = new HttpRequestMessage(HttpMethod.Post, "https://furion.net/"); using var httpClient = new HttpClient(); var httpResponseMessage = await httpClient.SendAsync(httpRequestMessage); // 调用 ReadAsync 方法将 HttpResponseMessage 对象转换为目标类型实例 var context = new HttpContentConverterContext(httpResponseMessage); return await httpContentConverterFactory.GetConverter<YourGenericClass<string>>(context).ReadAsync(context); }}