如何从Xamarin Forms向Rest Web API服务端发送List<>类型数据
问题原因
你现有代码的核心问题是直接将List<int>类型的adsIdList拼接到URL路径中,C#默认调用对象的ToString()方法只会输出System.Collections.Generic.List1[System.Int32]`这类类型标识字符串,完全没有传递实际的ID值,自然无法被服务端正确识别。
解决方案
根据你的接口规范,可选两种常用实现方式:
方案1:GET请求传递(适合ID数量较少的场景)
将ID列表转为逗号分隔的字符串,放到URL的查询参数中传递:
public async Task<TEntity> GetByAdsIdList<TEntity>(string dbTableName, string apiMethodName, List<int> adsIdList) { // 把ID列表拼接为逗号分隔的字符串 string idsStr = string.Join(",", adsIdList); // 组装带查询参数的请求地址 BaseOfApiBridge.UrlMaker($"{dbTableName}/{apiMethodName}?adsIdList={idsStr}"); string result = await BaseOfApiBridge.HttpClientBridge.GetStringAsync(BaseOfApiBridge.Url); return JsonConvert.DeserializeObject<TEntity>(result); }
- 服务端适配参考(ASP.NET Core为例):接口参数添加
[FromQuery]修饰,即可自动将逗号分隔的字符串解析为List<int>类型。
方案2:POST请求传递(适合ID数量多、无长度风险的场景)
将列表放到请求体中传递,避免GET请求的URL长度限制:
public async Task<TEntity> GetByAdsIdList<TEntity>(string dbTableName, string apiMethodName, List<int> adsIdList) { BaseOfApiBridge.UrlMaker($"{dbTableName}/{apiMethodName}"); // 序列化列表为JSON格式的请求体 var requestContent = new StringContent(JsonConvert.SerializeObject(adsIdList), System.Text.Encoding.UTF8, "application/json"); var response = await BaseOfApiBridge.HttpClientBridge.PostAsync(BaseOfApiBridge.Url, requestContent); // 校验请求是否成功 response.EnsureSuccessStatusCode(); string result = await response.Content.ReadAsStringAsync(); return JsonConvert.DeserializeObject<TEntity>(result); }
- 服务端适配参考(ASP.NET Core为例):接口声明为POST请求,参数添加
[FromBody]修饰即可直接接收列表参数。
注意事项
- 如果服务端要求的列表分隔符不是逗号,修改
string.Join的第一个参数即可匹配要求 - POST方案对传输的列表长度没有限制,是更通用的实现方式
内容的提问来源于stack exchange,提问作者parsa
相关产品推荐
相关产品推荐

