5.16移除斜杠 / 配额 / ETag

部分服务端对路径末尾的 / 敏感(如 /api/ 与 /api),可能造成 301 重定向或路由匹配失败。开启该功能后,框架会在构造最终请求地址时自动去除路径末尾的 /。

移除 URL 地址末尾的 /#

部分服务端对路径末尾的 / 敏感(如 /api//api),可能造成 301 重定向或路由匹配失败。开启该功能后,框架会在构造最终请求地址时自动去除路径末尾的 /

HTTP 声明式请求通过 RemoveTrailingSlashAttribute 特性来移除 URL 地址末尾的 /。相应的 HTTP 声明式提取器实现为 RemoveTrailingSlashDeclarativeExtractor 类型,该类型负责解析 RemoveTrailingSlashAttribute 特性并构建 HttpRequestBuilder 实例所需的移除 URL 地址末尾的 / 配置。

cs
// 在接口定义上应用,影响所有方法[RemoveTrailingSlash]public interface IHttpService : IHttpDeclarative{    // 在方法上应用    [RemoveTrailingSlash]    [Get("https://furion.net/")]    Task<string> GetStringAsync();    [RemoveTrailingSlash(false)]   // 禁用该功能    [Get("https://furion.net/")]    Task<string> GetStringAsync();}

请求地址将变为 https://furion.net

RemoveTrailingSlashAttribute 包含以下构造函数和属性:

  • 构造函数

    • new():作用于方法或接口,移除 URL 地址末尾的 /
    • new(enabled):作用于方法或接口,设置是否移除 URL 地址末尾的 /
  • 属性

    • Enabled:是否启用(bool 类型),默认值为 true(启用)。

设置请求接口配额键#

为当前请求指定配额键,用于关联在 HttpClientOptions 中配置的配额限制规则。

HTTP 声明式请求通过 QuotaKeyAttribute 特性来设置请求接口配额键。相应的 HTTP 声明式提取器实现为 QuotaKeyDeclarativeExtractor 类型,该类型负责解析 QuotaKeyAttribute 特性并构建 HttpRequestBuilder 实例所需的请求接口配额键配置。

cs
// 在接口定义上应用,影响所有方法[QuotaKey("weixin")]public interface IHttpService : IHttpDeclarative{    [Get("https://furion.net/")]    Task<string> GetStringAsync();    // 在方法上应用    [QuotaKey("qq")]    [Get("https://furion.net/")]    Task<string> GetStringAsync();}

QuotaKeyAttribute 包含以下构造函数和属性:

  • 构造函数

    • new(key):作用于方法或接口,设置请求接口配额键。
  • 属性

    • Key:配额键(string 类型)。

启用 ETag 响应缓存#

ETag(实体标签)是 HTTP 协议中用于标识资源版本的一种机制。服务器在响应头中返回资源的 ETag 值(例如 "abc123"),客户端在后续请求中可通过 If-None-Match 头携带该值。若资源未发生变化,服务器返回 304 Not Modified,无需重新传输内容;否则返回新内容及新的 ETag

启用 ETag 缓存后,框架会自动处理这一过程:首次请求缓存响应及 ETag,后续请求自动附加 If-None-Match;收到 304 状态码时直接复用缓存内容,减少数据传输并提升请求效率。在弱网环境或移动端流量计费场景下,这一机制能显著降低带宽消耗,同时加快响应速度。

HTTP 声明式请求通过 UseETagAttribute 特性来启用 ETag 响应缓存。相应的 HTTP 声明式提取器实现为 UseETagDeclarativeExtractor 类型,该类型负责解析 UseETagAttribute 特性并构建 HttpRequestBuilder 实例所需的启用 ETag 响应缓存配置。

cs
// 在接口定义上应用,影响所有方法[UseETag]public interface IHttpService : IHttpDeclarative{    // 在方法上应用    [UseETag]    [Get("https://furion.net/")]    Task<string> GetStringAsync();    [UseETag(false)]   // 禁用该功能    [Get("https://furion.net/")]    Task<string> GetStringAsync();}

UseETagAttribute 包含以下构造函数和属性:

  • 构造函数

    • new():作用于方法或接口,启用 ETag 响应缓存。
    • new(enabled):作用于方法或接口,设置是否启用 ETag 响应缓存。
  • 属性

    • Enabled:是否启用(bool 类型),默认值为 true(启用)。