6.4自定义内容处理器(如序列化)

创建于 2026 年 8 月 17 日约 1 分钟读完

在特定场景下,当框架内置的 IHttpContentProcessor 内容处理器无法满足需求时,可以通过自定义 IHttpContentProcessor 内容处理器来解决。

如果您希望替换框架默认的 System.Text.Json 序列化提供程序,例如使用 Newtonsoft.Json 来为 application/json 内容类型添加特定的序列化配置选项,那么您可以通过实现 IHttpContentProcessor 接口来满足这一自定义需求。

cs
public class CustomStringContentProcessor : HttpContentProcessorBase{    public override bool CanProcess(HttpContentProcessorContext context) =>        context.ContentType == "application/json";    public override HttpContent? Process(HttpContentProcessorContext context)    {        if (TryProcess(context, out var httpContent))        {            return httpContent;        }        var content = context.RawContent!.GetType().IsBasicType() || context.RawContent is JsonElement or JsonNode            ? context.RawContent.ToString()            : context.RawContent.ToJsonString(ResolveJsonSerializerOptions(context.HttpClientName));        var stringContent = new StringContent(content!, context.Encoding,            new MediaTypeHeaderValue(context.ContentType) { CharSet = context.Encoding?.WebName ?? "utf-8" });        return stringContent;    }}

接下来,可以通过以下两种方式应用自定义内容处理器:

  • 单次请求设置
cs
HttpRequestBuilder.Post("https://furion.net/")    .AddHttpContentProcessors(() => [ new CustomStringContentProcessor() ])    .SetJsonContent(new { id = 1, name = "Furion" });
  • 全局配置

Startup.csProgram.cs 文件中,配置并注册 HttpRemote 服务,以启用自定义内容处理器功能:

cs
services.AddHttpRemote(builder =>{    builder.AddHttpContentProcessors(() => [ new CustomStringContentProcessor() ]);});