You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter如何发送含嵌套对象与列表的模型至POST REST API

发送包含嵌套对象与列表的模型至POST API端点

假设你使用的是.NET环境(从你提到的模型类风格推断),以下是直接可用的实现方案,基于内置HttpClient或常用第三方库RestSharp完成请求发送:

前提:你已完成模型填充

假设你已经有了填充好的NewClientModel实例:

var populatedClient = YourDataPopulateMethod(); // 你自己实现的填充方法

方案1:使用.NET内置HttpClient(推荐)

1. 初始化HttpClient(注意单例复用)

// 推荐通过依赖注入注册单例HttpClient,避免频繁创建实例导致Socket资源耗尽
using var httpClient = new HttpClient();
httpClient.BaseAddress = new Uri("https://your-target-api-domain.com/");

// 配置请求头:指定接受JSON格式,添加认证信息(如果API需要)
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "your-auth-token"); // 可选

2. 发送POST请求(自动序列化)

PostAsJsonAsync会自动将模型序列化为JSON并发送,无需手动处理序列化:

try
{
    // 发送请求到指定API端点(比如 /api/new-client)
    var response = await httpClient.PostAsJsonAsync("api/new-client", populatedClient);
    
    // 验证请求是否成功(非2xx状态码会抛出HttpRequestException)
    response.EnsureSuccessStatusCode();
    
    // 可选:读取API返回的响应数据(替换YourResponseModel为你的响应模型类)
    var apiResponse = await response.Content.ReadFromJsonAsync<YourResponseModel>();
    
    // 处理响应逻辑
}
catch (HttpRequestException ex)
{
    // 处理请求异常:比如网络错误、API返回4xx/5xx错误
    Console.WriteLine($"请求失败: {ex.Message}");
}

自定义序列化配置(可选)

如果API要求特定的JSON格式(比如驼峰命名、忽略空值),可以手动配置JsonSerializerOptions:

var jsonOptions = new JsonSerializerOptions
{
    PropertyNamingPolicy = JsonNamingPolicy.CamelCase, // 转为驼峰命名
    IgnoreNullValues = true, // 忽略空值属性
    WriteIndented = false // 输出紧凑JSON
};

var jsonContent = JsonSerializer.Serialize(populatedClient, jsonOptions);
var requestContent = new StringContent(jsonContent, Encoding.UTF8, "application/json");

var response = await httpClient.PostAsync("api/new-client", requestContent);

方案2:使用RestSharp(第三方库)

如果习惯用RestSharp,先通过NuGet安装RestSharp包,再执行以下代码:

var restClient = new RestClient("https://your-target-api-domain.com/");
var request = new RestRequest("api/new-client", Method.Post);

// 添加认证头(如果需要)
request.AddHeader("Authorization", "Bearer your-auth-token");

// 自动将模型序列化为JSON请求体
request.AddJsonBody(populatedClient);

// 发送请求并获取响应
var response = await restClient.ExecuteAsync<YourResponseModel>(request);

if (response.IsSuccessful)
{
    // 处理成功响应
    var apiResponse = response.Data;
}
else
{
    // 处理错误:查看响应状态码和错误信息
    Console.WriteLine($"API返回错误: {response.StatusCode} - {response.ErrorMessage}");
}

关键注意事项

  • 序列化兼容性:确保模型的属性命名、数据类型与API接口定义完全匹配,否则会导致序列化失败或API解析错误。
  • 认证处理:如果API需要身份验证,务必在请求头中添加正确的认证信息(比如Bearer Token、API Key)。
  • 错误处理:不要忽略API返回的非2xx状态码,通过EnsureSuccessStatusCode()或手动检查StatusCode来捕获并处理错误场景。
  • HttpClient复用:避免每次请求都创建新的HttpClient实例,推荐通过依赖注入注册为单例,防止Socket资源泄漏。

内容的提问来源于stack exchange,提问作者Kevin Mendoza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 23:41:32