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
相关产品推荐
相关产品推荐

