5.16设置请求内容(Body)

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

支持设置任意类型的请求内容。

HTTP 声明式请求通过 BodyAttribute 特性来配置请求内容。相应的 HTTP 声明式提取器为 BodyDeclarativeExtractor 类型,它负责解析单个 BodyAttribute 特性,并构建 HttpRequestBuilder 实例所需的请求内容配置。

cs
public interface IHttpService : IHttpDeclarative{    // 标记参数为请求内容    [Post("https://furion.net/")]    Task<string> PostStringAsync([Body] object body);   // 自动推断 Content-Type    // 支持设置 Content-Type    [Post("https://furion.net/")]    Task<string> PostStringAsync([Body("application/json")] object body);   // 或使用 [Body(MediaTypeNames.Application.Json)]    // 支持设置 Content-Type 和字符集    [Post("https://furion.net/")]    Task<string> PostStringAsync([Body("application/json; charset=utf-8")] object body);    // URL 编码表单    [Post("https://furion.net/")]    Task<string> PostStringAsync([Body("application/x-www-form-urlencoded")] object body);    // 使用 StringContent 构建 URL 编码表单    [Post("https://furion.net/")]    Task<string> PostStringAsync([Body("application/x-www-form-urlencoded", UseStringContent = true)] object body);    // 可配置不进行 URL 编码处理    [Post("https://furion.net/")]    Task<string> PostStringAsync([Body("application/x-www-form-urlencoded", urlEncode = false)] object body);    // 支持原始 raw 字符串内容    [Post("https://furion.net/")]    Task<string> PostStringAsync([Body(RawString = true)] string body); // 默认内容类型 text/plain    [Post("https://furion.net/")]    Task<string> PostStringAsync([Body("application/json", RawString = true)] string body);    // 支持配置文件路径(或互联网地址)    [Post("https://furion.net/")]    Task<string> PostStringAsync([Body(AsFile = true)] string filePath);    // 冻结参数类型将被忽略    [Post("https://furion.net/")]    Task<string> PostStringAsync([Body] CancellationToken cancellationToken);}

BodyAttribute 标记的参数通过底层的 httpRequestBuilder.SetContent 方法进行设置,支持任意非冻结类型的参数。

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

  • 构造函数

    • new():作用于参数,将参数作为请求内容。
    • new(contentType):作用于参数,将参数作为请求内容,支持设置内容类型。
    • new(contentType, contentEncoding):作用于参数,将参数作为请求内容,支持设置内容类型和编码。
  • 属性

    • ContentType:内容类型(string 类型)。
    • ContentEncoding:内容编码(string 类型)。
    • UseStringContent:是否使用 StringContent 构建 FormUrlEncodedContent,默认值为 false,仅当 ContentTypeapplication/x-www-form-urlencoded 时有效。
    • UrlEncode:是否对表单数据进行 URL 编码(bool 类型),默认值为 true
    • RawString:是否为原始字符串内容(bool 类型),默认值为 false,仅当参数为字符串类型且此属性为 true 时有效。
    • AsFile:将字符串作为文件路径(支持互联网地址)(bool 类型),默认值为 false,仅当参数为字符串类型且此属性为 true 时有效。
    • DisposeResourcesOnRequestCompletion:是否在请求结束后自动释放资源(bool 类型),默认值为 false