3.30Content-Type 与条件构建

在与部分较老版本的 HTTP 服务进行对接时,如果发送请求内容时设置了 Content-Type 请求标头,可能会导致请求处理异常。而现代 HTTP 接口通常不会存在此类限制。

移除内容的默认 Content-Type#

在与部分较老版本的 HTTP 服务进行对接时,如果发送请求内容时设置了 Content-Type 请求标头,可能会导致请求处理异常。而现代 HTTP 接口通常不会存在此类限制。

若在发送请求时需要移除请求内容对应的 Content-Type 请求标头,可以按照以下方式进行设置:

cs
HttpRequestBuilder.Post("https://furion.net")    .SetOmitContentType(true);  // 移除内容默认的 Content-Type

除了采用上述方法外,另一种实现方式是利用 SetOnPreSetContent(Action<HttpContent>) 方法,在设置请求内容之前修改请求头,将 Content-Type 置为 null

cs
HttpRequestBuilder.Post("https://furion.net")    .SetOnPreSetContent(httpContent =>    {        httpContent.Headers.ContentType = null;    });

条件化配置构建器#

在构建 HTTP 远程请求的构建器实例时,常需根据不同条件动态配置请求参数。例如,当用户执行搜索操作时,应将 ?search=关键字 查询参数添加到请求中;反之,则无需添加。

针对此类场景,HttpRequestBuilder 提供了 When 方法,用于根据指定条件执行相应的配置操作。该方法支持链式调用,使代码更加简洁清晰。

cs
HttpRequestBuilder.Post("https://furion.net")    .When(!string.IsNullOrEmpty(token), b => b.AddBearerAuthentication(token))    .When(!string.IsNullOrEmpty(keyword), b => b.WithQueryParameter("search", keyword));

示例代码说明:

  • token 不为空或 null 时,自动添加 Bearer 认证。
  • keyword 不为空或 null 时,将 search 查询参数添加到请求中。

该方式可灵活应用于各种条件判断场景,提升代码的可维护性和可读性。